E pili ana i ka ulu kaulana o Kubernetes

E Habr!

I ka hopena o ke kauwela, makemake mākou e hoʻomanaʻo iā ʻoe e hoʻomau mākou i ka hana ma ke kumuhana Kubernetes a ua hoʻoholo e hoʻopuka i kahi ʻatikala mai Stackoverflow e hōʻike ana i ke kūlana o kēia papahana i ka hoʻomaka ʻana o Iune.

E pili ana i ka ulu kaulana o Kubernetes

Nanea i ka heluhelu ʻana!

I ka manawa e kākau ai i kēia ʻatikala, ua kokoke ka makahiki o Kubernetes. ʻeono makahiki, a i loko o nā makahiki ʻelua i hala iho nei ua ulu nui kona kaulana a hoʻopaʻa mau ʻia i waena punahele loa nā paepae. Aia ʻo Kubernetes i ke kolu o kēia makahiki. No ka recap: He kahua ʻo Kubernetes i hoʻolālā ʻia no ka holo ʻana a me ka hoʻonohonoho ʻana i nā ukana pahu pahu.

Hoʻomaka nā pahu ma ke ʻano he hoʻolālā kūikawā no ka hoʻokaʻawale ʻana i nā kaʻina hana ma Linux; Ua hoʻokomo ʻia nā pahu mai ka makahiki 2007 pūʻulu, a mai ka makahiki 2002 - nā inoa inoa. Ua hoʻolālā maikaʻi ʻia nā pahu i ka makahiki 2008, i ka wā i loaʻa ai LXC, a ua hoʻomohala ʻo Google i kāna ʻoihana hui kūloko i kapa ʻia ʻO Borg, kahi i "hana ʻia nā hana a pau i loko o nā pahu." Mai ʻaneʻi mākou wikiwiki i 2013, i ka wā i hoʻokuʻu mua ʻia ai ʻo Docker, a ua lilo nā ipu i mea hoʻonā kaulana. I kēlā manawa, ʻo ka mea hana nui no ka hoʻokani pahu pahu Mesos, ʻoiai ʻaʻole kaulana ʻo ia. Ua hoʻokuʻu mua ʻia ʻo Kubernetes i ka makahiki 2015, a ma hope iho ua lilo kēia mea hana i ka maʻamau de facto ma ke kahua o ka orchestration ipu.

No ka ho'āʻo e hoʻomaopopo i ke kumu i kaulana ai ʻo Kubernetes, e hoʻāʻo kākou e pane i kekahi mau nīnau. ʻO ka manawa hea ka manawa hope i hiki ai i nā mea hoʻomohala ke ʻae i ka pehea e kau ai i nā noi i ka hana? ʻEhia mau mea hoʻomohala āu i ʻike ai i ka mea hoʻohana i nā mea hana e like me ka mea i hoʻolako ʻia ma waho o ka pahu? ʻEhia nā luna hoʻomalu kapua i kēia lā i maopopo ʻole i ka hana ʻana o nā noi? E nānā mākou i nā pane i kēia mau nīnau ma kēia ʻatikala.

Hoʻolālā e like me YAML

I ka honua i hele mai ka Puppet a me Chef i Kubernetes, ʻo kekahi o nā hoʻololi nui loa ʻo ka neʻe ʻana mai ka "infrastructure as code" i ka "infrastructure as data" -e like me YAML. Hiki ke wehewehe maʻalahi ʻia nā kumuwaiwai āpau ma Kubernetes, nā pods, nā hoʻonohonoho, nā manawa i hoʻonohonoho ʻia, nā volumes, a me nā mea ʻē aʻe ma kahi faila YAML. ʻo kahi laʻana:

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

ʻO kēia ʻike ka mea maʻalahi i nā ʻoihana DevOps a i ʻole SRE e hōʻike piha i kā lākou mau hana me ka ʻole e kākau i nā code ma nā ʻōlelo e like me Python a i ʻole Javascript.

ʻO nā mea maikaʻi ʻē aʻe o ka hoʻonohonoho ʻana i nā ʻōnaehana e like me ka ʻikepili:

  • GitOps a i ʻole Git Operations Version Control. ʻO kēia ala e hiki ai iā ʻoe ke mālama i nā faila Kubernetes YAML āpau i loko o nā waihona git, no laila hiki iā ʻoe ke hahai pololei i ka wā i hana ʻia ai kahi hoʻololi, nāna i hana, a me ka mea i loli maoli. Hoʻonui kēia i ka ʻike o nā hana a puni ka hui a hoʻomaikaʻi i ka maikaʻi o ka hana ma o ka hoʻopau ʻana i ka ambiguity, ʻoiai ma kahi e ʻimi ai nā limahana i nā kumuwaiwai a lākou e pono ai. Ma ka manawa like, lilo ia i mea maʻalahi ke hoʻololi maʻalahi i nā kumuwaiwai Kubernetes ma ka hoʻohui ʻana i kahi noi huki.
  • Scalability. Ke wehewehe ʻia nā kumuwaiwai ʻo YAML, lilo ia i mea maʻalahi loa i nā mea hoʻohana cluster ke hoʻololi i hoʻokahi a ʻelua paha helu i loko o kahi kumu Kubernetes, a laila e hoʻololi i ke ʻano o ka unahi. Hāʻawi ʻo Kubernetes i kahi hana no ka hoʻokaʻawale autoscaling o nā pods, hiki ke hoʻohana ʻia no ka hoʻoholo maʻalahi i ka helu liʻiliʻi a me ka helu kiʻekiʻe o nā pods e koi ʻia i kahi hoʻonohonoho hoʻonohonoho pono e mālama i nā pae haʻahaʻa a kiʻekiʻe. No ka laʻana, inā ua kau ʻoe i kahi hoʻonohonoho e koi ai i ka mana hou ma muli o ka piʻi koke ʻana o ke kaʻa, a laila hiki ke hoʻololi ʻia maxReplicas mai 10 a 20:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

  • Palekana a me ka hooponopono. He maikaʻi ʻo YAML no ka loiloi ʻana i ke ʻano o nā mea i kau ʻia ma Kubernetes. No ka laʻana, pili ka manaʻo palekana nui inā e holo ana kāu mau hana ma ke ʻano he mea hoʻohana ʻole. I kēia hihia, pono paha mākou i nā mea hana e like me paio, mea hōʻoia YAML/JSON, hoʻohui Wehe Kulekele Agena, he mea hōʻoia kulekele e hōʻoia i ka pōʻaiapili PalekanaContext ʻAʻole ʻae kāu mau hana i ka pahu e holo me nā kuleana luna. Inā koi ʻia kēia, hiki i nā mea hoʻohana ke hoʻohana i kahi kulekele maʻalahi pule au, e like me kēia:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • Nā koho no ka hoʻohui ʻana me kahi mea hāʻawi kapua. ʻO kekahi o nā hiʻohiʻona kaulana loa o ka ʻenehana kiʻekiʻe o kēia lā ʻo ka holo ʻana i nā haʻahaʻa hana ma nā mea hoʻolako kapuaʻi lehulehu. Ke hoʻohana nei i ka ʻāpana mea hoʻolako ao Hāʻawi ʻo Kubernetes i kēlā me kēia puʻupuʻu e hui pū me ka mea hāʻawi kapua e holo ai. No ka laʻana, inā hoʻohana ka mea hoʻohana i kahi noi ma Kubernetes ma AWS a makemake e hōʻike i kēlā noi ma o kahi lawelawe, kōkua ka mea hāʻawi kapua i ka hana ʻana i ka lawelawe. LoadBalancerka mea e hoʻolako 'akomi i ka ukana kaulike ʻO Amazon Elastic Load Balancee hoʻohuli hou i ke kaʻa i nā pods noi.

Hoʻonui

He mea hoʻonui loa ʻo Kubernetes a makemake nā mea hoʻomohala. Aia kahi hoʻonohonoho o nā kumuwaiwai e like me nā pods, deployments, StatefulSets, mea huna, ConfigMaps, etc. ʻOiaʻiʻo, hiki i nā mea hoʻohana a me nā mea hoʻomohala ke hoʻohui i nā kumuwaiwai ʻē aʻe ma ke ʻano nā wehewehe waiwai maʻamau.

No ka laʻana, inā makemake mākou e wehewehe i kahi kumuwaiwai CronTab, a laila hiki iā ʻoe ke hana penei:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

Ma hope hiki iā mākou ke hana i kahi kumuwaiwai CronTab e like me kēia:

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

ʻO kahi koho ʻē aʻe no ka hoʻonui ʻia ma Kubernetes ʻo ia ka mea hiki ke kākau i kāna mau ʻōlelo ponoʻī. Operator he kaʻina hana kūikawā i ka hui Kubernetes e hana ana e like me ka "kaapuni mana" Me ke kōkua o kahi mea hoʻohana, hiki i ka mea hoʻohana ke hoʻokaʻawale i ka hoʻokele ʻana i nā CRD (nā wehewehe kumu kumu maʻamau) ma o ka hoʻololi ʻana i ka ʻike me ka Kubernetes API.

Nui nā mea hana i loko o ke kaiāulu e maʻalahi i nā mea hoʻomohala e hana i kā lākou mea hana ponoʻī. Ma waena o lākou - Ka Papa Hana a me SDK mea hana. Hāʻawi kēia SDK i kahi kumu e hiki ai i kahi mea hoʻomohala ke hoʻomaka koke i ka hana ʻana i kahi mea hoʻohana. E ʻōlelo mākou hiki iā ʻoe ke hoʻomaka mai ka laina kauoha e like me kēia:

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

Hana kēia i nā code boilerplate no kāu mea hoʻohana, me nā faila YAML a me ka code Golang:

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

A laila hiki iā ʻoe ke hoʻohui i nā API i koi ʻia a me ka mea hoʻoponopono, e like me kēia:

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

A laila, i ka hope, e hōʻuluʻulu i ka mea hoʻohana a hoʻouna iā ia i ke kākau inoa o kāu pahu:

$ operator-sdk build your.container.registry/youruser/myapp-operator

Inā makemake ka mea hoʻomohala i ka mana hou aku, hiki ke hoʻololi ʻia ke code boilerplate ma nā faila Go. No ka laʻana, e hoʻololi i nā kikoʻī o ka mea hoʻoponopono, hiki iā ʻoe ke hoʻololi i ka faila controller.go.

ʻO kekahi papahana NA WAHI A PAU, hiki iā ʻoe ke hana i nā ʻōlelo me ka hoʻohana wale ʻana i nā faila YAML. No ka laʻana, e wehewehe ʻia kahi mea hoʻohana no Apache Kafka no laila,. Me ia, hiki iā ʻoe ke hoʻokomo i kahi hui Kafka ma luna o nā Kubernetes me nā kauoha ʻelua:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

A laila hoʻonohonoho iā ia me kahi kauoha ʻē aʻe:

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

Nāno hou

I nā makahiki i hala iho nei, e puka mai ana nā hoʻokuʻu Kubernetes nui i kēlā me kēia mahina - ʻo ia hoʻi, ʻekolu a ʻehā mau hoʻokuʻu nui i kēlā me kēia makahiki. ʻAʻole emi ka helu o nā hiʻohiʻona hou i hoʻokomo ʻia i kēlā me kēia o lākou. Eia kekahi, ʻaʻohe hōʻailona o ka lohi ʻana i kēia mau manawa paʻakikī - e nānā i ke kūlana i kēia manawa Ka hana papahana Kubernetes ma Github.

Hāʻawi nā mana hou iā ʻoe e hoʻomaʻamaʻa maʻalahi i nā hana puʻupuʻu ma waena o nā haʻahaʻa hana like ʻole. Eia kekahi, hauʻoli ka poʻe programmer i ka mana ʻoi aku ka maikaʻi i ka wā e kau pololei ana i nā noi i ka hana.

Ke kaiaulu

ʻO kekahi ʻano nui o ka kaulana o Kubernetes ʻo ia ka ikaika o kona kaiāulu. Ma 2015, ma ka hiki ʻana i ka mana 1.0, kākoʻo ʻia ʻo Kubernetes e Ka Papahana Hoʻonohonoho ʻInikua Kapua.

Aia kekahi mau kaiaulu like ʻole ʻO SIG (Special Interest Groups) i kālele ana i ka hana ʻana ma nā wahi like ʻole o Kubernetes i ka wā e ulu ana ka papahana. Ke hoʻohui mau nei kēia mau pūʻulu i nā hiʻohiʻona hou, e ʻoi aku ka maʻalahi o ka hana ʻana me Kubernetes.

Hoʻokipa pū ka Cloud Native Foundation iā CloudNativeCon/KubeCon, ʻo ia, i ka manawa e kākau ai, ʻo ia ka ʻaha kūkā open source nui loa ma ka honua. Hoʻopaʻa maʻamau ʻia ʻekolu manawa i ka makahiki, e hui pū ana i nā kaukani ʻoihana e makemake e hoʻomaikaʻi iā Kubernetes a me kāna kaiaolaola, a me ke aʻo ʻana i nā hiʻohiʻona hou e ʻike ʻia i kēlā me kēia ʻekolu mahina.

Eia kekahi, ua loaʻa iā Cloud Native Foundation Komite Hooponopono Kiekie, ka mea, me nā SIG, e loiloi i nā mea hou a i kēia manawa papahana nā kālā i kālele ʻia i ke kaiaola ao. ʻO ka hapa nui o kēia mau papahana e kōkua i ka hoʻomaikaʻi ʻana i ka ikaika o Kubernetes.

ʻO ka hope, ke manaʻoʻiʻo nei au ʻaʻole e holomua ʻo Kubernetes me ka ʻole o ka hoʻoikaika ʻana o ke kaiāulu holoʻokoʻa, kahi e hui pū ai nā kānaka akā i ka manawa like e hoʻokipa i nā mea hou i loko o ka pā.

ʻO ka Future

ʻO kekahi o nā pilikia nui a nā mea hoʻomohala e hana ai i ka wā e hiki mai ana, ʻo ia ka hiki ke nānā aku i nā kikoʻī o ke code ponoʻī, ʻaʻole i ka ʻōnaehana e holo ai. Kūlike ia i kēia mau ʻano serverless architectural paradigm, ʻo ia kekahi o nā alakaʻi i kēia lā. Loaʻa nā ʻōhua kiʻekiʻe, e.g. knative и OpenFaas, e hoʻohana ana i nā Kubernetes e hoʻokaʻawale i ka ʻōnaehana mai ka mea hoʻomohala.

Ma kēia ʻatikala, ua ʻohi wale mākou i ka ʻili o ka mokuʻāina ʻo Kubernetes i kēia manawa-ʻoiaʻiʻo, ʻo ia wale nō ka piko o ka hau hau. Loaʻa i nā mea hoʻohana Kubernetes nā kumuwaiwai ʻē aʻe, hiki, a me nā hoʻonohonoho hoʻonohonoho i kā lākou makemake.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka