Banyere ewu ewu na-eto eto nke Kubernetes

Ndewo, Habr!

Na njedebe nke okpomọkụ, anyị chọrọ ichetara gị na anyị na-anọgide na-arụ ọrụ na isiokwu Kubernetes ma kpebie ibipụta akụkọ sitere na Stackoverflow na-egosi ọnọdụ ihe na-eme na ọrụ a na mmalite June.

Banyere ewu ewu na-eto eto nke Kubernetes

Na-enwe obi ụtọ ịgụ ihe!

N'oge edere akụkọ a, afọ Kubernetes dị ihe dị ka. afọ isii, na n'ime afọ abụọ gara aga, ewu ewu ya etoola nke ukwuu nke na a na-ahọrọ ya mgbe niile ọkacha mmasị nyiwe. Kubernetes nọ n'ọkwa nke atọ n'afọ a. Iji chịkọtaghachi: Kubernetes bụ ikpo okwu emebere maka ịgba ọsọ na ịhazi ọrụ arụrụ arụ.

Akpa malitere dị ka ihe pụrụ iche maka ikewapụ usoro na Linux; containers agụnyere kemgbe 2007 ìgwè, na ebe ọ bụ na 2002 - aha oghere. Emebere arịa ndị ka mma karịa n'afọ 2008, mgbe ọ dị LXC, Google wee mepụta usoro ụlọ ọrụ nke ya nke a na-akpọ Borg, ebe "a na-arụ ọrụ niile n'ime akpa." Site na ebe a anyị na-aga n'ihu na 2013, mgbe ntọhapụ mbụ nke Docker mere, na arịa mechara bụrụ ihe ngwọta na-ewu ewu. N'oge ahụ, ngwá ọrụ bụ isi maka ịkụ ọkpọ bụ Mesos, n'agbanyeghị na ọ bụchaghị ewu ewu. A tọhapụrụ Kubernetes na mbụ na 2015, mgbe nke ahụ gasịrị, ngwá ọrụ a ghọrọ ọkọlọtọ de facto na ngalaba nhazi ihe.

Iji gbalịa ịghọta ihe kpatara Kubernetes ji ewu ewu, ka anyị gbalịa ịza ajụjụ ole na ole. Kedu mgbe ikpeazụ ndị mmepe nwere ike kwekọrịtara otu esi ebuga ngwa na mmepụta? Ndị nrụpụta ole ka ị maara bụ ndị na-eji ngwaọrụ ndị a ka ewepụtara ha n'ime igbe? Kedu ndị nchịkwa igwe ojii dị taa na-aghọtaghị ka ngwa si arụ ọrụ? Anyị ga-eleba anya n’azịza nke ajụjụ ndị a n’isiokwu a.

Akụrụngwa dị ka YAML

N'ụwa nke si na Puppet na Chef gaa Kubernetes, otu n'ime mgbanwe kachasị ukwuu bụ ịkwaga "ihe akụrụngwa dị ka koodu" gaa na "ihe akụrụngwa dị ka data" - kpọmkwem, dị ka YAML. Akụrụngwa niile dị na Kubernetes, nke gụnyere pọd, nhazi, oge ebugara, mpịakọta, wdg, nwere ike ịkọwa ngwa ngwa na faịlụ YAML. Ọmụmaatụ:

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

Echiche a na-eme ka ọ dịrị ndị ọkachamara DevOps ma ọ bụ SRE mfe ikwupụta oke ọrụ ha n'enweghị ide koodu n'asụsụ dị ka Python ma ọ bụ Javascript.

Uru ndị ọzọ dị n'ịhazi akụrụngwa dịka data gụnyere:

  • GitOps ma ọ bụ njikwa ụdị arụmọrụ Git. Usoro a na-enye gị ohere idowe faịlụ Kubernetes YAML niile na ebe nchekwa git, ka ị nwee ike soro kpọmkwem mgbe mgbanwe gbanwere, onye mere ya, na ihe gbanwere kpọmkwem. Nke a na-abawanye nghọta nke arụmọrụ n'ime nzukọ ahụ niile ma na-eme ka arụmọrụ arụ ọrụ dịkwuo mma site na iwepụ ihe mgbagwoju anya, karịsịa ebe ndị ọrụ kwesịrị ịchọ ihe onwunwe ha chọrọ. N'otu oge ahụ, ọ na-adị mfe ịme mgbanwe na akụrụngwa Kubernetes na-akpaghị aka site na ijikọ arịrịọ ịdọrọ.
  • scalability. Mgbe akọwara akụrụngwa dị ka YAML, ọ na-adị mfe nke ukwuu maka ndị na-ahụ maka ụyọkọ ịgbanwe nọmba ma ọ bụ abụọ n'ime akụrụngwa Kubernetes, si otú ahụ na-agbanwe ka o si agba. Kubernetes na-enye usoro maka ngbanwe autoscaling nke pods, nke enwere ike iji mee ka ọ dị mfe ikpebi ihe kacha nta na ọnụ ọgụgụ kachasị elu nke achọrọ na nhazi nhazi nhazi iji jikwaa okporo ụzọ dị ala na nke dị elu. Dịka ọmụmaatụ, ọ bụrụ na ibunyela nhazi nke chọrọ ikike ọzọ n'ihi mmụba mberede na okporo ụzọ, mgbe ahụ enwere ike ịgbanwe maxReplicas site na 10 ruo 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

  • Nchekwa na njikwa. YAML dị mma maka ịtụle ka esi etinye ihe na Kubernetes. Dịka ọmụmaatụ, isi nchekwa nchekwa na-eche ma ibu ọrụ gị ọ na-arụ ọrụ dị ka onye na-abụghị onye nchịkwa. N'okwu a, anyị nwere ike ịchọrọ ngwaọrụ dịka nkwanye ùgwù, YAML/JSON validator, gbakwunyere Mepee onye nnọchi anya amụma, a iwu validator iji hụ na ndị gbara ya gburugburu Nchekwaokwu Ibu ọrụ gị anaghị ekwe ka akpa ahụ jiri ikike nchịkwa rụọ ọrụ. Ọ bụrụ na achọrọ nke a, ndị ọrụ nwere ike itinye iwu dị mfe Ana m ekpe ekpere, dị ka nke a:

package main

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

  • Nhọrọ maka njikọta na onye na-eweta igwe ojii. Otu n'ime ihe ndị a ma ama na teknụzụ dị elu nke oge a bụ iji rụọ ọrụ na ndị na-eweta igwe ojii. Iji akụrụngwa igwe-oji-eweta Kubernetes na-enye ohere ka ụyọkọ ọ bụla jikọọ na igwe ojii nke ọ na-agba ọsọ. Dịka ọmụmaatụ, ọ bụrụ na onye ọrụ na-eme ngwa na Kubernetes na AWS ma chọọ ikpughe ngwa ahụ site na ọrụ, onye na-eweta igwe ojii na-enyere aka ịmepụta ọrụ ahụ na-akpaghị aka. LoadBalancernke ga-akpaghị aka na-enye ihe nkwụnye ibu Amazon Elastic Load Balancerka ibugharịa okporo ụzọ gaa na pọd ngwa.

Mgbasawanye

Kubernetes bụ nnọọ extensible na mmepe hụrụ ya n'anya. Enwere usoro akụrụngwa dị ka pọd, ntinye, StatefulSets, ihe nzuzo, ConfigMaps, wdg. N'ezie, ndị ọrụ na ndị mmepe nwere ike ịgbakwunye ihe ndị ọzọ n'ụdị nkọwa akụ omenala.

Dịka ọmụmaatụ, ọ bụrụ na anyị chọrọ ịkọwapụta akụrụngwa CronTab, mgbe ahụ ị nwere ike ime ihe dị ka nke a:

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

E mesịa, anyị nwere ike ịmepụta akụ CronTab ihe dị ka nke a:

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

Nhọrọ ọzọ maka extensibility na Kubernetes bụ na onye nrụpụta nwere ike dee nkwupụta nke ya. Onye ọrụ bụ usoro pụrụ iche na ụyọkọ Kubernetes nke na-arụ ọrụ dịka "njikwa sekit" Site n'enyemaka nke onye ọrụ, onye ọrụ nwere ike megharịa njikwa CRD (nkọwa akụrụngwa omenala) site na iji Kubernetes API na-agbanwe ozi.

Enwere ọtụtụ ngwaọrụ n'ime obodo na-eme ka ọ dịrị ndị mmepe mfe ịmepụta ndị na-arụ ọrụ nke ha. N'etiti ha - Onye ọrụ Framework ya SDK onye ọrụ. SDK a na-enye ntọala nke onye nrụpụta nwere ike ịmalite ịmepụta onye ọrụ ngwa ngwa. Ka anyị kwuo na ị nwere ike ibido n'ahịrị iwu ihe dịka nke a:

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

Nke a na-emepụta koodu ọkụ ọkụ niile maka onye ọrụ gị, gụnyere faịlụ YAML na koodu 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

Mgbe ahụ ị nwere ike ịgbakwunye API na njikwa achọrọ, dị ka nke a:

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

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

Mgbe ahụ, n'ikpeazụ, kpọkọta onye ọrụ ma ziga ya na ndekọ nke akpa gị:

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

Ọ bụrụ na onye nrụpụta chọkwara njikwa karịa, enwere ike ịgbanwe koodu mmiri ọkụ dị na faịlụ Go. Dịka ọmụmaatụ, iji gbanwee nkọwapụta nke njikwa, ị nwere ike ime mgbanwe na faịlụ ahụ controller.go.

Ọrụ ọzọ Ebe ọ bụla, na-enye gị ohere ịmepụta nkwupụta site na iji naanị faịlụ YAML nkwupụta. Dịka ọmụmaatụ, onye ọrụ maka Apache Kafka ga-akọwapụta ihe dịka ka. Site na ya, ịnwere ike ịwụnye ụyọkọ Kafka n'elu Kubernetes yana naanị iwu ole na ole:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ma were iwu ọzọ hazie ya:

$ 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

Innovation

N'ime afọ ole na ole gara aga, nnukwu mwepụta Kubernetes na-apụta kwa ọnwa ole na ole - ya bụ, mwepụta atọ ma ọ bụ anọ kwa afọ. Ọnụ ọgụgụ njirimara ọhụrụ ewepụtara na nke ọ bụla n'ime ha anaghị ebelata. Ọzọkwa, ọ dịghị ihe ịrịba ama nke ịdalata ọbụna n'oge ndị a siri ike - lee ihe ọnọdụ dị ugbu a Ọrụ Kubernetes na Github.

Ikike ọhụrụ na-enye gị ohere ịchịkọta ọrụ n'ụzọ na-agbanwe agbanwe n'ofe ọrụ dị iche iche. Na mgbakwunye, ndị mmemme na-enwe njikwa ka ukwuu mgbe ha na-ebuga ngwa ozugbo na mmepụta.

Obodo

Akụkụ ọzọ bụ isi nke Kubernetes ewu ewu bụ ike obodo ya. N'afọ 2015, mgbe ọ ruru ụdị 1.0, Kubernetes na-akwado ya Ngwé ojii Ngwá Ọrụ Ngwá Ọrụ.

E nwekwara obodo dị iche iche SIG (Ndị otu mmasị pụrụ iche) lekwasịrị anya na-arụ ọrụ na mpaghara dị iche iche nke Kubernetes ka ọrụ ahụ na-amalite. Otu ndị a na-agbakwunye atụmatụ ọhụrụ mgbe niile, na-eme ka ha na Kubernetes na-arụ ọrụ dịkwuo mma ma dị mma.

Cloud Native Foundation na-akwadokwa CloudNativeCon/KubeCon, nke, n'oge edere, bụ ọgbakọ ogbako mepere emepe kachasị n'ụwa. A na-emekarị ugboro atọ n'afọ, ọ na-achịkọta ọtụtụ puku ndị ọkachamara chọrọ imezi Kubernetes na gburugburu ebe obibi ya, yana ịmụta ihe ọhụrụ na-apụta kwa ọnwa atọ.

Ọzọkwa, Cloud Native Foundation nwere Kọmiti na-ahụ maka ọrụ nka, nke, yana SIG, na-enyocha ọhụrụ na dị adị oru ngo ego lekwasịrị anya na gburugburu igwe ojii. Ọtụtụ n'ime ọrụ ndị a na-enyere aka melite ike nke Kubernetes.

N'ikpeazụ, ekwenyere m na Kubernetes agaghị enwe ihe ịga nke ọma dịka ọ bụ na-enweghị mgbalị siri ike nke obodo dum, ebe ndị mmadụ na-ejikọta ọnụ ma n'otu oge ahụ na-anabata ndị bịara ọhụrụ n'ogige ahụ.

Ọdịnihu

Otu n'ime isi ihe ịma aka ndị mmepe ga-enwe n'ọdịnihu bụ ikike ilekwasị anya na nkọwa nke koodu ahụ n'onwe ya, ọ bụghị na akụrụngwa nke ọ na-arụ ọrụ. Ọ na-ezute usoro ndị a ụkpụrụ ụkpụrụ ụlọ na-enweghị ihe nkesa, nke bụ otu n'ime ndị na-eduga taa. Usoro dị elu adịlarị, dịka ọmụmaatụ. Ama ama и MepeeFaas, nke na-eji Kubernetes akọwapụta akụrụngwa sitere na onye nrụpụta.

N'isiokwu a, anyị enyochala elu ọnọdụ Kubernetes ugbu a - n'ezie, ọ bụ naanị ọnụ ọnụ ice. Ndị ọrụ Kubernetes nwere ọtụtụ akụrụngwa, ikike na nhazi ndị ọzọ dị n'aka ha.

isi: www.habr.com

Tinye a comment