Mabapi le botumo bo ntseng bo eketseha ba Kubernetes

Hey Habr!

Qetellong ea lehlabula, re batla ho u hopotsa hore re tsoela pele ho sebetsa sehloohong Kubernetes mme a etsa qeto ya ho phatlalatsa sengoloa ho tsoa ho Stackoverflow se bonts'ang boemo ba litaba morerong ona qalong ea Phuptjane.

Mabapi le botumo bo ntseng bo eketseha ba Kubernetes

Thabela ho bala!

Nakong ea ho ngola sengoloa sena, lilemo tsa Kubernetes li haufi. lilemo tse tšeletseng, 'me lilemong tse peli tse fetileng botumo ba eona bo eketsehile hoo e lulang e beoa har'a e ratoang haholo sethala. Kubernetes e maemong a boraro selemong sena. Ho pheta-pheta: Kubernetes ke sethala se etselitsoeng ho tsamaisa le ho hlophisa meroalo e mengata ea mesebetsi.

Lijana li ile tsa qala e le moralo o khethehileng oa mekhoa ea ho arola Linux; li-container li kenyelelitsoe ho tloha ka 2007 lihlopha, 'me ho tloha ka 2002 - libaka tsa mabitso. Li-container li entsoe hantle le ho feta ka 2008, ha e se e fumaneha LXC, 'me Google e iketselitse mokhoa oa eona oa ka hare oa khoebo o bitsoang borg, moo “mosebetsi oohle o etsoang ka linkho.” Ho tloha mona re potlakela ho ea ho 2013, ha ho lokolloa ha Docker ka lekhetlo la pele, 'me lijana li ile tsa qetella li fetohile tharollo e tsebahalang haholo. Ka nako eo, sesebelisoa se seholo sa 'mino oa lijana e ne e le Mesos, le hoja a ne a sa tuma haholo. Kubernetes e ile ea lokolloa ka lekhetlo la pele ka 2015, ka mor'a moo sesebelisoa sena e ile ea e-ba maemo a tloaelehileng tšimong ea 'mino oa lijana.

Ho leka ho utloisisa hore na ke hobane'ng ha Kubernetes e tumme hakana, a re lekeng ho araba lipotso tse 'maloa. Ke neng lekhetlo la ho qetela bahlahisi ba khonang ho lumellana ka mokhoa oa ho kenya likopo tlhahisong? Ke bahlahisi ba bakae bao u ba tsebang ba sebelisang lisebelisoa joalo ka ha li fanoe ka ntle ho lebokose? Ke balaoli ba bakae ba maru kajeno ba sa utloisiseng hore na likopo li sebetsa joang? Re tla sheba likarabo tsa lipotso tsena sehloohong sena.

Lisebelisoa tse kang YAML

Lefatšeng le ileng la tloha ho Puppet le Chef ho ea Kubernetes, e 'ngoe ea liphetoho tse kholo ka ho fetisisa e bile ho tloha ho "lisebelisoa tsa motheo e le khoutu" ho ea ho "lisebelisoa tse kang data" - haholo-holo, joalo ka YAML. Lisebelisoa tsohle ho Kubernetes, tse kenyelletsang li-pods, litlhophiso, maemo a rometsoeng, lipalo, joalo-joalo, li ka hlalosoa habonolo faeleng ea YAML. Ka mohlala:

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

Pono ena e nolofalletsa litsebi tsa DevOps kapa SRE ho hlalosa ka botlalo mesebetsi ea bona ntle le ho ngola khoutu ka lipuo tse kang Python kapa Javascript.

Melemo e meng ea ho hlophisa lisebelisoa joalo ka data e kenyelletsa:

  • GitOps kapa Git Operations Version Control Control. Mokhoa ona o u lumella ho boloka lifaele tsohle tsa Kubernetes YAML sebakeng sa polokelo ea git, kahoo o ka tseba hantle hore na phetoho e entsoe neng, e entsoe ke mang, le hore na hantle-ntle ho fetohile eng. Sena se eketsa ponaletso ea tšebetso mokhatlong oohle le ho ntlafatsa bokhabane ba ts'ebetso ka ho felisa ho hlaka, haholo-holo moo basebetsi ba lokelang ho batla lisebelisoa tseo ba li hlokang. Ka nako e ts'oanang, ho ba bonolo ho iketsetsa liphetoho ho lisebelisoa tsa Kubernetes ka ho kopanya kopo ea ho hula feela.
  • Scalability. Ha lisebelisoa li hlalosoa e le YAML, ho ba bonolo haholo ho basebetsi ba lihlopha ho fetola nomoro e le 'ngoe kapa tse peli mohloling oa Kubernetes, kahoo ba fetola tsela eo e lekanyang ka eona. Kubernetes e fana ka mokhoa oa ho tsamaisa li-pods tse otlolohileng, tse ka sebelisoang ho tseba hantle hore na palo e tlase le e phahameng ea li-pods e hlokeha ho tlhophiso e itseng ea phepelo ho sebetsana le maemo a tlase le a phahameng a sephethephethe. Mohlala, haeba u kentse tlhophiso e hlokang matla a eketsehileng ka lebaka la ho phahama ka tšohanyetso ha sephethephethe, joale maxReplicas e ka fetoloa ho tloha ho 10 ho isa ho 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

  • Tshireletso le tsamaiso. YAML e ntle bakeng sa ho lekola hore na lintho li sebelisoa joang ho Kubernetes. Mohlala, taba e kholo ea ts'ireletso e amana le hore na mosebetsi oa hau o ntse o sebetsa joalo ka mosebelisi eo e seng oa admin. Tabeng ena, re ka hloka lisebelisoa tse kang qabanya, YAML/JSON e netefatsang, hammoho Open Policy Agent, molaoli oa leano ho netefatsa hore moelelo oa taba SecurityContext mesebetsi ea hau ha e lumelle setshelo ho sebetsa ka litokelo tsa motsamaisi. Haeba sena se hlokahala, basebelisi ba ka sebelisa leano le bonolo kea rapela, rata sena:

package main

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

  • Likhetho tsa ho kopanngoa le mofani oa leru. E 'ngoe ea mekhoa e tsebahalang haholo ea theknoloji e phahameng ea kajeno ke ho tsamaisa mesebetsi e mengata ho bafani ba maru a sechaba. Ho sebelisa karolo moabi wa leru Kubernetes e lumella sehlopha leha e le sefe hore se ikopanye le mofani oa maru seo se tsamaeang ho sona. Mohlala, haeba mosebelisi a sebelisa sesebelisoa ho Kubernetes ho AWS mme a batla ho pepesa sesebelisoa seo ka ts'ebeletso, mofani oa leru o thusa ho iketsetsa ts'ebeletso ka bo eona. LoadBalancer, e tla fana ka tekanyo ea mojaro ka bo eona Amazon Elastic Load Balancerho lebisa sephethephethe ho li-pods tsa kopo.

Katoloso

Kubernetes e atoloha haholo mme bahlahisi ba e rata. Ho na le lethathamo la lisebelisoa tse fumanehang joalo ka li-pods, deployments, StatefulSets, liphiri, ConfigMaps, joalo-joalo. Ke 'nete, basebelisi le bahlahisi ba ka eketsa lisebelisoa tse ling ka foromo litlhaloso tsa mohlodi tloaelo.

Ka mohlala, haeba re batla ho hlalosa mohlodi CronTab, joale u ka etsa ntho e kang ena:

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

Hamorao re ka theha sesebelisoa sa CronTab ntho e kang ena:

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

Khetho e 'ngoe ea ho atolosoa ho Kubernetes ke hore moqapi a ka ngola lipolelo tsa hae. Setsebi ke ts'ebetso e ikhethileng sehlopheng sa Kubernetes e sebetsang ho latela "taolo ea potoloho" Ka thuso ea opareitara, mosebelisi a ka iketsetsa taolo ea li-CRD (litlhaloso tsa lisebelisoa tsa moetlo) ka ho fapanyetsana tlhahisoleseling le Kubernetes API.

Ho na le lisebelisoa tse 'maloa sechabeng tse nolofalletsang bahlahisi ho iketsetsa li-operators. Har'a bona - Moralo oa Opereishene le ea hae SDK ea opereishene. SDK ena e fana ka motheo oo ho oona moqapi a ka qalang ho theha opereishene kapele. Ha re re u ka qala ho tsoa moleng oa taelo ntho e kang ena:

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

Sena se theha khoutu eohle ea boilerplate bakeng sa opareitara ea hau, ho kenyeletsoa lifaele tsa YAML le khoutu ea 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

Ebe o ka eketsa li-API le molaoli o hlokahalang, joalo ka:

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

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

Ebe, qetellong, bokella opareitara 'me u e romelle ho ngoliso ea setshelo sa hau:

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

Haeba moqapi a batla taolo le ho feta, khoutu ea boilerplate ho lifaele tsa Go e ka fetoloa. Ka mohlala, ho fetola lintlha tse itseng tsa molaoli, u ka etsa liphetoho faeleng controller.go.

Morero o mong KHAHLE, e u lumella ho etsa lipolelo u sebelisa lifaele tsa YAML tse hlalosang feela. Mohlala, opareitara ea Apache Kafka e ka hlalosoa hoo e ka bang kahoo. Ka eona, o ka kenya sehlopha sa Kafka holim'a Kubernetes ka litaelo tse 'maloa feela:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ebe u e hlophisa ka taelo e 'ngoe:

$ 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

Ntlafatso

Lilemong tse 'maloa tse fetileng, likhatiso tse kholo tsa Kubernetes li ntse li tsoa likhoeling tse ling le tse ling tse' maloa - ke hore, likhatiso tse kholo tse tharo ho isa ho tse 'ne ka selemo. Palo ea likarolo tse ncha tse hlahisoang ho e 'ngoe le e' ngoe ea tsona ha e fokotsehe. Ho feta moo, ha ho na matšoao a ho fokotseha esita le linakong tsena tse thata - sheba hore na boemo ke bofe hona joale Ts'ebetso ea projeke ea Kubernetes ho Github.

Bokhoni bo bocha bo u lumella ho etsa ts'ebetso e bonolo haholoanyane ea ho kopanya mesebetsi e mengata e fapaneng. Ho feta moo, baetsi ba mananeo ba natefeloa ke taolo e kholo ha ba tsamaisa lits'ebetso ka kotloloho ho tlhahiso.

Sechaba

Karolo e 'ngoe e kholo ea botumo ba Kubernetes ke matla a sechaba sa eona. Ka 2015, ha e fihla mofuta oa 1.0, Kubernetes e tšehelitsoe ke Cloud Native Computing Foundation.

Ho boetse ho na le lichaba tse fapaneng SIG (Lihlopha tse Khethehileng tsa Thahasello) li tsepamisitse maikutlo ho sebetsa libakeng tse fapaneng tsa Kubernetes ha morero o ntse o tsoela pele. Lihlopha tsena li lula li eketsa likarolo tse ncha, li etsa hore ho sebetsa le Kubernetes ho be bonolo le ho feta.

Cloud Native Foundation e boetse e tšoara CloudNativeCon/KubeCon, eo, ka nako ea ho ngola, e leng kopano e kholo ka ho fetisisa ea mohloli o bulehileng lefatšeng. Ka tloaelo e tšoaroa ka makhetlo a mararo ka selemo, e bokella litsebi tse likete tse batlang ho ntlafatsa Kubernetes le tikoloho ea eona, hammoho le ho ithuta likarolo tse ncha tse hlahang likhoeli tse ling le tse ling tse tharo.

Ho feta moo, Cloud Native Foundation e na le Komiti ea Tekheniki ea Tlhokomelo, eo, hammoho le li-SIG, e hlahlobang tse ncha le tse teng merero lichelete tse shebaneng le tikoloho ea maru. Boholo ba merero ena e thusa ho ntlafatsa matla a Kubernetes.

Qetellong, ke lumela hore Kubernetes e ne e ke ke ea atleha joalo ka ha e se ntle le boiteko bo hlokolosi ba sechaba sohle, moo batho ba khomarelang empa ka nako e tšoanang ba amohela ba bacha ka har'a sakeng.

Bokamoso

E 'ngoe ea liphephetso tse ka sehloohong tseo bahlahisi ba tla tlameha ho sebetsana le tsona nakong e tlang ke bokhoni ba ho tsepamisa maikutlo ho lintlha tsa khoutu ka boeona, eseng holim'a mekhoa ea motheo eo e sebetsang ho eona. E kopana le mekhoa ena paradigm ea meralo e se nang seva, e leng e 'ngoe ea tse etellang pele kajeno. Mekhatlo e tsoetseng pele e se e ntse e le teng, mohlala. knative и OpenFaas, e sebelisang Kubernetes ho hula lisebelisoa tsa motheo ho tsoa ho moqapi.

Sengoliloeng sena, re se re shebile feela bokaholimo ba boemo ba hona joale ba Kubernetes - ha e le hantle, ke ntlha feela ea leqhoa. Basebelisi ba Kubernetes ba na le lisebelisoa tse ling tse ngata, bokhoni, le litlhophiso tseo ba nang le tsona.

Source: www.habr.com

Eketsa ka tlhaloso