Mo te tipu haere o te rongonui o Kubernetes

Hei Habr!

I te mutunga o te raumati, e hiahia ana matou ki te whakamahara ki a koe kei te mahi tonu matou mo te kaupapa Kubernetes me te whakatau ki te whakaputa i tetahi tuhinga mai i Stackoverflow e whakaatu ana i nga ahuatanga o tenei kaupapa i te timatanga o Pipiri.

Mo te tipu haere o te rongonui o Kubernetes

Kia pai te pānui!

I te wa e tuhi ana i tenei tuhinga, he tata te pakeke o Kubernetes. e ono tau, a, i roto i nga tau e rua kua pahure ake nei, kua piki ake tona rongonui, ka noho tonu ki waenga tino pai tüäpapa. Ko Kubernetes te turanga tuatoru i tenei tau. Hei whakahoki korero: Ko te Kubernetes he papaaho i hangaia mo te whakahaere me te whakariterite i nga kawenga mahi.

I timata nga ipu hei hoahoa motuhake mo te wehe i nga tukanga i Linux; kua whakauruhia nga ipu mai i te tau 2007 Tuhinga, mai i te tau 2002 – mokowā ingoa. I hangaia nga ipu i te pai ake i te tau 2008, i te wa e waatea ana LXC, a ka whakawhanakehia e Google tana ake tikanga umanga a-roto e kiia nei borg, i reira “ka mahia nga mahi katoa i roto i nga ipu”. Mai i konei ka tere whakamua matou ki te tau 2013, i te wa i puta ai te tukunga tuatahi o Docker, ka mutu ka noho nga ipu hei otinga papatipu rongonui. I taua wa, ko te taputapu matua mo te whakahiato ipu Mesos, ahakoa kaore ia i tino rongonui. I tukuna tuatahitia a Kubernetes i te tau 2015, i muri mai ka noho tenei taputapu hei paerewa pono i roto i te mara o te hanga ipu.

Hei ngana ki te mohio he aha i tino rongonui ai a Kubernetes, me ngana ki te whakautu i etahi patai. Nohea te wa whakamutunga i whakaae ai nga kaiwhakawhanake me pehea te tuku tono ki te whakaputa? E hia nga kaiwhakawhanake e mohio ana koe e whakamahi ana i nga taputapu i te mea ka tukuna mai i waho o te pouaka? Tokohia nga kaiwhakahaere kapua i enei ra kaore i te mohio ki te mahi o nga tono? Ka titiro tatou ki nga whakautu ki enei patai i tenei tuhinga.

Hanganga hei YAML

I roto i te ao i haere mai i te Puppet me te Kaitao ki Kubernetes, ko tetahi o nga huringa nui ko te neke mai i te "hanganga hei waehere" ki te "hanganga hei raraunga"—taapiri, penei i te YAML. Ko nga rauemi katoa kei Kubernetes, kei roto ko nga pene, nga whirihoranga, nga tauira kua tohatohahia, nga pukapuka, me etahi atu, ka taea te whakaahua ngawari ki te konae YAML. Hei tauira:

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

Ma tenei tirohanga ka ngawari ake mo nga tohunga ngaio DevOps, SRE ranei ki te whakapuaki i o raatau mahi me te kore e tuhi waehere ki nga reo penei i te Python me te Javascript.

Ko etahi atu painga o te whakarite hanganga hei raraunga ko:

  • GitOps, Git Operations Putanga Mana. Ma tenei huarahi ka taea e koe te pupuri i nga konae Kubernetes YAML katoa ki roto i nga putunga git, kia taea ai e koe te whai i te wa i puta ai he huringa, na wai i mahi, me te aha i whakarereke. Ka piki ake te marama o nga mahi puta noa i te whakahaere me te whakapai ake i te pai o te whakahaere ma te whakakore i te rangirua, ina koa me rapu nga kaimahi i nga rauemi e hiahiatia ana e ratou. I te wa ano, ka ngawari ake te whakarereke aunoa i nga rauemi Kubernetes ma te hanumi noa i te tono kume.
  • Tauineine. Ina tautuhia nga rauemi hei YAML, ka tino ngawari ki nga kaiwhakahaere tautau ki te huri i te kotahi, e rua ranei nga tau i roto i te rauemi Kubernetes, na reira ka huri te ahua o te tauine. Ka whakaratohia e Kubernetes he tikanga mo te whakahiato aunoa i nga poti, ka taea te whakamahi kia pai ai te whakatau he aha te iti me te morahi o nga poti e hiahiatia ana i roto i tetahi whirihoranga tohatoha hei hapai i nga taumata iti me te teitei o te waka. Hei tauira, mena kua tukuna e koe he whirihoranga e hiahia ana kia kaha ake na te piki ohorere o te waka, katahi ka taea te whakarereke maxReplicas mai i te 10 ki te 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

  • Te haumaru me te whakahaere. He pai a YAML mo te arotake me pehea te hora o nga mea ki Kubernetes. Hei tauira, he awangawanga nui mo te haumarutanga kei te haere tonu o mahi hei kaiwhakamahi kore-whakahaere. I tenei keehi, ka hiahia pea tatou ki nga taputapu penei whakataetae, Kaiwhakamana YAML/JSON, me te taapiri Kaihoko Kaupapa Tuwhera, he whakamana kaupapa here ki te whakarite i te horopaki Horopaki Haumarutanga e kore e taea e o taumahatanga te whakahaere te ipu me nga mana whakahaere. Mena ka hiahiatia tenei, ka taea e nga kaiwhakamahi te tono kaupapa here ngawari Ka inoi ahau, penei:

package main

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

  • Nga whiringa mo te whakauru ki te kaiwhakarato kapua. Ko tetahi o nga ahuatanga tino rongonui i roto i nga hangarau teitei o enei ra ko te whakahaere i nga mahi i runga i nga kaiwhakarato kapua. Te whakamahi i te waahanga kaiwhakarato kapua Ka whakaaetia e Kubernetes tetahi kapoi ki te whakauru ki te kaiwhakarato kapua e whakahaere ana. Hei tauira, ki te whakahaere tetahi kaiwhakamahi i tetahi tono i Kubernetes i runga i te AWS me te hiahia ki te whakaatu i taua tono ma tetahi ratonga, ka awhina te kaiwhakarato kapua ki te hanga aunoa i te ratonga. LoadBalancerka whakarato aunoa i te taurite kawenga Amazon Elastic Load Balanceki te tuku i nga waka ki nga putunga tono.

Whakanuia

He tino whanui te Kubernetes, he pai ki nga kaihanga. He huinga o nga rauemi e waatea ana penei i nga pene, nga whakatakotoranga, StatefulSets, mea ngaro, ConfigMaps, etc. Pono, ka taea e nga kaiwhakamahi me nga kaiwhakawhanake te taapiri i etahi atu rauemi ki te ahua whakamāramatanga rauemi ritenga.

Hei tauira, ki te hiahia tatou ki te tautuhi i tetahi rauemi CronTab, ka taea e koe te mahi 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

Hei muri ka taea e tatou te hanga rauemi CronTab penei:

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

Ko tetahi atu whiringa mo te whakaroa ki Kubernetes ka taea e te kaiwhakawhanake te tuhi i ana ake korero. Kaiwhakahaere he tukanga motuhake i roto i te roopu Kubernetes e mahi ana i runga i te "mana iahiko" Ma te awhina o tetahi kaiwhakahaere, ka taea e te kaiwhakamahi te whakahaere aunoa i nga CRD (whakamaramatanga rauemi ritenga) ma te whakawhiti korero me te Kubernetes API.

He maha nga taputapu kei roto i te hapori e ngawari ana mo nga kaiwhakawhanake ki te hanga i o raatau ake kaiwhakahaere. I roto ia ratou - Anga Kaiwhakahaere me tōna Kaiwhakahaere SDK. Ko tenei SDK he turanga e taea ai e te kaiwhakawhanake te timata ki te hanga i tetahi kaiwhakahaere. Me kii ka taea e koe te timata mai i te rarangi whakahau penei:

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

Ma tenei ka waihanga i nga waehere boilerplate mo to kaiwhakahaere, tae atu ki nga konae YAML me te waehere 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

Na ka taea e koe te taapiri i nga API me te kaiwhakahaere e hiahiatia ana, penei:

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

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

Na, ka mutu, huihuia te kaiwhakahaere ka tukuna ki te rehita o to ipu:

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

Ki te hiahia te kaiwhakawhanake kia kaha ake te mana whakahaere, ka taea te whakarereke i te waehere boilerplate i roto i nga konae Haere. Hei tauira, ki te whakarereke i nga korero motuhake o te kaiwhakahaere, ka taea e koe te whakarereke i te konae controller.go.

He kaupapa ano HEI KATOA, ka taea e koe te hanga korero ma te whakamahi i nga konae korero YAML anake. Hei tauira, ka tautuhia he kaiwhakahaere mo Apache Kafka na. Ma te reira, ka taea e koe te whakauru i tetahi kahui Kafka ki runga ake o Kubernetes me nga whakahau e rua:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Na ka whirihora ki tetahi atu whakahau:

$ 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

Whakahoutanga

I roto i nga tau kua pahure ake nei, kua puta nga putanga nui o Kubernetes ia marama - ara, e toru ki te wha nga putanga nui ia tau. Ko te maha o nga ahuatanga hou i whakauruhia ki ia waahanga kaore e heke. I tua atu, karekau he tohu o te puhoi haere ahakoa i enei wa uaua - tirohia te ahuatanga o naianei Mahinga kaupapa Kubernetes i Github.

Ma nga kaha hou ka taea e koe te whakangawari ake i nga mahi kohinga puta noa i nga momo mahi. I tua atu, he pai ake te mana whakahaere a nga kaihātaka i te wa e tohatoha ana nga tono ki te whakaputa.

Te hapori

Ko tetahi atu ahuatanga nui o te rongonui o Kubernetes ko te kaha o tana hapori. I te tau 2015, i te taenga ki te putanga 1.0, i tautokohia a Kubernetes e Kapua Te Punaha Rorohiko Rapu.

He maha ano nga hapori SIG (Nga Roopu Whainga Motuhake) i aro ki te mahi i nga waahanga rereke o Kubernetes i te wa e whanake ana te kaupapa. Ko enei roopu kei te taapiri i nga ahuatanga hou, kia pai ake ai te mahi me nga Kubernetes.

Ko te Cloud Native Foundation hoki e manaaki ana i a CloudNativeCon/KubeCon, i te wa e tuhi ana, ko te huihuinga puna tuwhera nui rawa atu i te ao. E toru nga wa i te tau e whakahaerehia ana, ka whakahuihui i nga mano o nga tohunga e hiahia ana ki te whakapai ake i a Kubernetes me tona puunaha rauwiringa kaiao, me te ako i nga ahuatanga hou ka puta ia toru marama.

Ano, Cloud Native Foundation kua Komiti Tirotiro Hangarau, me nga SIG, ka arotake i nga mea hou me nga mea hou kaupapa nga putea i arotahi ki te rauwiringa kaiao kapua. Ko te nuinga o enei kaupapa hei whakapai ake i nga kaha o Kubernetes.

Ka mutu, e whakapono ana ahau e kore e eke angitu a Kubernetes me te kore e kaha te whakaaro o te hapori katoa, i reira ka piri tahi te tangata engari i taua wa ka mihi ki nga tauhou ki roto i te kahui.

Future

Ko tetahi o nga wero nui ka pa ki nga kaihanga a muri ake nei ko te kaha ki te aro ki nga korero o te waehere ake, kaua ki nga hanganga e whakahaere ana. Ka tutuki enei ahuatanga paradigm hoahoanga kore tūmau, ko tetahi o nga rangatira i tenei ra. Kei te noho tonu nga anga matatau, hei tauira. mohio и OpenFaas, e whakamahi ana i nga Kubernetes ki te tango i nga hanganga mai i te kaiwhakawhanake.

I roto i tenei tuhinga, kua rakuraku noa matou i te mata o te ahua o Kubernetes o naianei—aa, ko te pito noa iho o te hukapapa. He maha atu nga rauemi a nga kaiwhakamahi Kubernetes, nga kaha, me nga whirihoranga kei a raatau.

Source: will.com

Tāpiri i te kōrero