Nezve mukurumbira uri kukura weKubernetes

Hei Habr!

Pakupera kwezhizha, tinoda kukuyeuchidza kuti tinoramba tichishanda pamusoro pehurukuro Kubernetes ndokufunga kuburitsa chinyorwa kubva kuStackoverflow ichiratidza mamiriro akaita zvinhu muchirongwa ichi kutanga kwaChikumi.

Nezve mukurumbira uri kukura weKubernetes

Enjoy reading!

Panguva yekunyora chinyorwa ichi, zera reKubernetes riri approx. makore matanhatu, uye mumakore maviri apfuura kufarirwa kwayo kwakawedzera zvekuti inogara ichiiswa pakati zvakanyanya kufarirwa platforms. Kubernetes ari pachinhanho chechitatu gore rino. Kuti udzokorore: Kubernetes ipuratifomu yakagadzirirwa kumhanya uye kuronga mitoro yemidziyo.

Midziyo yakatanga sedhizaini yakakosha yekuzviparadzanisa nevamwe muLinux; midziyo yaisanganisira kubvira 2007 cgroups, uye kubvira 2002 - mazita enzvimbo. Makombi akagadzirwa zvakatonaka muna 2008, payakazowanikwa LXC, uye Google yakagadzira nzira yayo yemukati yekambani inonzi Borg, uko β€œbasa rose rinoitwa mumidziyo.” Kubva pano isu tinokurumidza kuenda ku2013, pakaitika kuburitswa kwekutanga kweDocker, uye midziyo yakazove yakakurumbira mhinduro. Panguva iyoyo, chishandiso chikuru chekuridza midziyo yaive Mesos, kunyange zvazvo akanga asina mukurumbira zvisingaite. Kubernetes yakatanga kuburitswa muna 2015, mushure meizvozvo chishandiso ichi chakava de facto standard mumunda wemidziyo orchestration.

Kuedza kunzwisisa kuti sei Kubernetes yakakurumbira, ngatiedze kupindura mibvunzo mishoma. Ndeipi nguva yekupedzisira vagadziri vakakwanisa kubvumirana pamafambisirwo ekushandisa mukugadzira? Vangani vagadziri vaunoziva vanoshandisa zvishandiso sezvavanopihwa kunze kwebhokisi? Vangani vatariri vemakore varipo nhasi vasinganzwisise kuti maapplication anoshanda sei? Tichatarisa mhinduro dzemibvunzo iyi munyaya ino.

Infrastructure seYAML

Munyika yabva kuPuppet naChef kuenda Kubernetes, imwe yeshanduko huru kwave kutama kubva ku "infrastructure secode" kuenda ku "infrastructure as data" -kunyanya, seYAML. Zvese zviwanikwa muKubernetes, izvo zvinosanganisira mapods, zvigadziriso, akaiswa zviitiko, mavhoriyamu, nezvimwe, zvinogona kutsanangurwa zviri nyore muYAML faira. Semuyenzaniso:

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

Maonero aya anoita kuti zvive nyore kuDevOps kana SRE nyanzvi kuti vataure zvizere mabasa avo pasina kunyora kodhi mumitauro yakaita sePython kana Javascript.

Zvimwe zvakanakira kuronga zvivakwa se data zvinosanganisira:

  • GitOps kana Git Operations Version Control. Iyi nzira inobvumidza iwe kuti uchengete ese Kubernetes YAML mafaera mune git repositories, saka iwe unogona kuteedzera chaizvo pakaitwa shanduko, ndiani akazviita, uye chii chaizvo chakanyatso chinja. Izvi zvinowedzera kujeka kwemashandiro musangano rese uye zvinonatsiridza mashandiro ekuita nekubvisa kusajeka, kunyanya uko vashandi vanofanirwa kutsvaga zviwanikwa zvavanoda. Panguva imwecheteyo, zvinova nyore kuita otomatiki shanduko kuKubernetes zviwanikwa nekungobatanidza chikumbiro chekudhonza.
  • Scalability. Kana zviwanikwa zvinotsanangurwa seYAML, zvinova nyore kwazvo kune vanobata masumbu kuti vachinje nhamba imwe kana mbiri muKubernetes sosi, nekudaro vachichinja kuti inoyera sei. Kubernetes inopa nzira yekuchinjika autoscaling yemapods, ayo anogona kushandiswa kuona zviri nyore kuti ndeapi hushoma uye huwandu hwehuwandu hwepods hunodiwa mune imwe dhizaini yekumisikidza kubata yakaderera uye yakakwirira mwero wetraffic. Semuyenzaniso, kana iwe wakaisa chigadziriso chinoda kuwedzera huwandu nekuda kwekamwe kamwe spike mutraffic, saka maxReplicas inogona kuchinjwa kubva pagumi kuenda pamakumi maviri:

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

  • Chengetedzo uye manejimendi. YAML yakanakira kuongorora kuti zvinhu zvinoiswa sei muKubernetes. Semuenzaniso, chikuru chekuchengetedza chine chekuita kana basa rako riri kushanda seasiri-admin mushandisi. Muchiitiko ichi, tingada maturusi akadai makwikwi, YAML/JSON validator, plus Vhura Policy Agent, mutemo unosimbisa kuti uve nechokwadi chekuti mamiriro acho ezvinhu SecurityContext mabasa ako haatenderi mudziyo kuti ushande nerusarura rwemaneja. Kana izvi zvichidikanwa, vashandisi vanogona kushandisa mutemo wakapfava ndinonamata, sezvizvi:

package main

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

  • Sarudzo dzekubatanidza ne cloud provider. Imwe yeanonyanya kuzivikanwa maitiro mune yanhasi yepamusoro tekinoroji ndeyekumhanyisa mitoro yebasa pane yeruzhinji Cloud vanopa. Kushandisa chikamu cloud-provider Kubernetes inobvumira chero cluster kuti ibatanidze nemupi wegore painomhanya. Semuenzaniso, kana mushandisi achimhanyisa application muKubernetes paAWS uye achida kuburitsa iyo application kuburikidza nesevhisi, mupi wegore anobatsira otomatiki kugadzira iyo sevhisi. LoadBalanceriyo inozopa otomatiki muyero wekuenzanisa Amazon Elastic Load Balancerkuendesa traffic kune application pods.

Kuwedzera

Kubernetes inowedzera zvakanyanya uye vanogadzira vanoida. Kune seti yezviwanikwa zviripo senge pods, deployments, StatefulSets, zvakavanzika, ConfigMaps, nezvimwewo. Ichokwadi, vashandisi nevagadziri vanogona kuwedzera zvimwe zviwanikwa mufomu Tsika resource tsananguro.

Somuenzaniso, kana tichida kutsanangura chitubu CronTab, ipapo iwe unogona kuita seizvi:

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

Gare gare isu tinogona kugadzira CronTab sosi chinhu chakadai:

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

Imwe sarudzo yekuwedzera muKubernetes ndeyekuti mugadziri anogona kunyora zvake zvirevo. Operator inzira yakakosha muKubernetes cluster inoshanda zvinoenderana ne "control circuit" Nerubatsiro rwemushandisi, mushandisi anogona otomatiki manejimendi eCRDs (custom resource tsananguro) nekuchinjana ruzivo neKubernetes API.

Kune akati wandei maturusi munharaunda anoita kuti zvive nyore kune vanogadzira kuti vagadzire ivo vanoshanda. Pakati pavo - Operator Framework uye yake Operator SDK. Iyi SDK inopa hwaro kubva kwairi mugadziri anogona kukurumidza kutanga kugadzira opareta. Ngatiti iwe unogona kutanga kubva pamutsetse wekuraira chimwe chinhu chakadai:

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

Izvi zvinogadzira ese boilerplate kodhi yemushandisi wako, kusanganisira YAML mafaera uye Golang kodhi:

.
|____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

Ipapo iwe unogona kuwedzera anodiwa APIs uye controller, seizvi:

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

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

Zvadaro, pakupedzisira, unganidza mushandisi uye utumire kune registry yemudziyo wako:

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

Kana mugadziri achida kunyange kutonga kwakawanda, iyo boilerplate kodhi muGo mafaera inogona kuchinjwa. Semuenzaniso, kugadzirisa zvakatemwa zvemutongi, unogona kuita shanduko kufaira controller.go.

Chimwe chirongwa KOSE, inokutendera iwe kugadzira zvirevo uchishandisa chete inozivisa YAML mafaera. Semuenzaniso, mushandisi weApache Kafka angatsanangurwa anenge saka. Nayo, unogona kuisa Kafka cluster pamusoro peKubernetes nemirairo yakati wandei:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Uye wozozvigadzirisa nemumwe murairo:

$ 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

Innovations

Mumakore mashoma apfuura, kuburitswa kukuru kwaKubernetes kwave kubuda mwedzi mishoma yega yega - kureva, matatu kusvika mana makuru ekuburitswa pagore. Huwandu hwezvinhu zvitsva zvinounzwa mune chimwe nechimwe chazvo hazvidzike. Uyezve, hapana zviratidzo zvekuderera kunyange munguva dzino dzakaoma - tarisa kuti mamiriro akaita sei iye zvino Kubernetes chirongwa chekuita paGithub.

Hutsva hutsva hunokutendera iwe kuti uwedzere kuchinjika cluster mashandiro pane akasiyana mabasa akasiyana. Pamusoro pezvo, vanogadzira mapurogiramu vanonakidzwa nekutonga kukuru kana vachitumira maapplication zvakananga kukugadzira.

Nharaunda

Chimwe chinhu chikuru chekuzivikanwa kwaKubernetes isimba renharaunda yayo. Muna 2015, pakusvika vhezheni 1.0, Kubernetes yakatsigirwa na Cloud Native Computing Nheyo.

Kunewo nharaunda dzakasiyana-siyana SIG (Special Interest Groups) yakatarisana nekushanda munzvimbo dzakasiyana dzeKubernetes sezvo chirongwa chinoshanduka. Aya mapoka ari kugara achiwedzera zvinhu zvitsva, zvichiita kuti kushanda neKubernetes kuve nyore uye nyore.

Iyo Cloud Native Foundation zvakare inotambira CloudNativeCon/KubeCon, iyo, panguva yekunyora, ndiyo yakakura kwazvo yakavhurika sosi musangano munyika. Inowanzoitwa katatu pagore, inounza pamwe zviuru zvevashandi vanoda kuvandudza Kubernetes uye ecosystem yayo, pamwe nekudzidza zvitsva zvinoonekwa mwedzi mitatu yega yega.

Uyezve, Cloud Native Foundation ine Komiti Inoona Nezvehunyanzvi, iyo, pamwe chete neSIGs, inoongorora zvitsva uye zviripo zvirongwa mari yakanangana neiyo cloud ecosystem. Mazhinji emapurojekiti aya anobatsira kuvandudza masimba eKubernetes.

Chekupedzisira, ndinotenda kuti Kubernetes yaisazobudirira sezvazviri pasina kuedza kwenharaunda yese, uko vanhu vanonamatirana asi panguva imwe chete vachigamuchira vatsva muboka.

Ramangwana

Imwe yematambudziko makuru ayo vagadziri vachazosangana naro mune ramangwana kugona kutarisa pane iyo kodhi iyo pachayo, uye kwete pane zvivakwa zvazvinoita. Inosangana nemaitiro aya serverless architectural paradigm, inova imwe yevatungamiri nhasi. Mafuremu epamusoro atovepo, semuenzaniso. knative ΠΈ OpenFaas, iyo inoshandisa Kubernetes kubvisa zvivakwa kubva kumugadziri.

Muchinyorwa chino, isu tangokwenya pamusoro pemamiriro azvino eKubernetes - kutaura zvazviri, ingori muromo wechando. Kubernetes vashandisi vane zvimwe zvakawanda zviwanikwa, kugona, uye zvigadziriso zvavanazvo.

Source: www.habr.com

Voeg