Mahitungod sa nagkadako nga pagkapopular sa Kubernetes

Hoy Habr!

Sa katapusan sa ting-init, gusto namong ipahinumdom kanimo nga nagpadayon kami sa pagtrabaho sa hilisgutan Kubernetes ug nakahukom sa pagmantala sa usa ka artikulo gikan sa Stackoverflow nga nagpakita sa kahimtang sa mga kalihokan niini nga proyekto sa sinugdanan sa Hunyo.

Mahitungod sa nagkadako nga pagkapopular sa Kubernetes

Malingaw sa pagbasa!

Sa panahon sa pagsulat niini nga artikulo, ang edad sa Kubernetes gibanabana. unom ka tuig ang panuigon, ug sa milabay nga duha ka tuig ang pagkapopular niini miuswag pag-ayo nga kini kanunay nga naa sa taliwala pinaka paborito mga plataporma. Ikatulo ang ranggo sa Kubernetes karong tuiga. Sa pag-recap: Ang Kubernetes usa ka plataporma nga gidisenyo alang sa pagpadagan ug pag-orkestra sa mga containerized nga workloads.

Ang mga sudlanan nagsugod isip usa ka espesyal nga disenyo alang sa paglain sa mga proseso sa Linux; Ang mga sudlanan gilakip sukad sa 2007 mga grupo, ug sukad 2002 – namespaces. Ang mga sudlanan gidisenyo nga mas maayo sa 2008, sa diha nga kini mahimong magamit LXC, ug ang Google naghimo sa kaugalingon nga internal nga mekanismo sa korporasyon nga gitawag Borg, diin “ang tanang buluhaton gihimo sa mga sudlanan.” Gikan dinhi nag-paspas kami sa 2013, sa dihang ang unang pagpagawas sa Docker nahitabo, ug ang mga sudlanan sa kataposan nahimong popular nga solusyon sa masa. Niadtong panahona, ang nag-unang himan alang sa orkestra sa sudlanan mao Mesos, bisan tuod dili siya popular kaayo. Ang Kubernetes unang gipagawas kaniadtong 2015, pagkahuman kini nga himan nahimong de facto nga sumbanan sa natad sa orkestra sa sudlanan.

Aron masabtan kung nganong sikat kaayo ang Kubernetes, sulayan nato pagtubag ang pipila ka mga pangutana. Kanus-a ang katapusang higayon nga ang mga nag-develop nagkauyon kung giunsa ang pag-deploy sa mga aplikasyon sa produksiyon? Pila ka mga developer ang imong nahibal-an nga naggamit sa mga himan ingon nga kini gihatag sa gawas sa kahon? Pila ka mga tigdumala sa panganod ang naa karon nga wala makasabut kung giunsa ang mga aplikasyon nagtrabaho? Atong tan-awon ang mga tubag niini nga mga pangutana niini nga artikulo.

Imprastraktura sama sa YAML

Sa kalibutan nga gikan sa Puppet ug Chef hangtod sa Kubernetes, usa sa labing dako nga pagbag-o mao ang pagbalhin gikan sa "imprastraktura isip code" ngadto sa "imprastraktura isip data"—partikular, sama sa YAML. Ang tanan nga mga kapanguhaan sa Kubernetes, nga naglakip sa mga pod, mga pag-configure, gi-deploy nga mga higayon, mga volume, ug uban pa, dali nga mahulagway sa usa ka YAML file. Pananglitan:

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

Kini nga pagtan-aw nagpasayon ​​sa mga propesyonal sa DevOps o SRE nga hingpit nga ipahayag ang ilang mga workloads nga dili kinahanglan nga magsulat og code sa mga pinulongan sama sa Python o Javascript.

Ang ubang mga bentaha sa pag-organisar sa imprastraktura ingon datos naglakip sa:

  • GitOps o Git Operations Version Control. Kini nga pamaagi nagtugot kanimo sa pagtipig sa tanan nga mga Kubernetes YAML nga mga file sa git repository, aron masubay nimo kung kanus-a gihimo ang usa ka pagbag-o, kinsa ang naghimo niini, ug kung unsa ang eksakto nga pagbag-o. Gidugangan niini ang transparency sa mga operasyon sa tibuuk nga organisasyon ug gipauswag ang kahusayan sa operasyon pinaagi sa pagwagtang sa dili klaro, labi na kung diin ang mga empleyado kinahanglan mangita alang sa mga kapanguhaan nga ilang gikinahanglan. Sa samang higayon, nahimong mas sayon ​​ang awtomatik nga paghimog mga kausaban sa mga kapanguhaan sa Kubernetes pinaagi lamang sa paghiusa sa hangyo sa pagbitad.
  • Scalability. Kung ang mga kapanguhaan gihubit ingon YAML, mahimong labi ka dali alang sa mga cluster operator nga magbag-o sa usa o duha nga numero sa usa ka kapanguhaan sa Kubernetes, sa ingon nagbag-o kung giunsa kini pagtimbang. Naghatag ang Kubernetes og mekanismo para sa pinahigda nga autoscaling sa mga pod, nga magamit aron sayon ​​nga matino kung unsa ang gikinahanglan sa minimum ug maximum nga gidaghanon sa mga pod sa usa ka partikular nga configuration sa deployment aron pagdumala sa ubos ug taas nga lebel sa trapiko. Pananglitan, kung nag-deploy ka usa ka configuration nga nanginahanglan dugang nga kapasidad tungod sa kalit nga pagtaas sa trapiko, nan ang maxReplicas mahimong usbon gikan sa 10 hangtod 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

  • Seguridad ug pagdumala. Ang YAML maayo alang sa pagtimbang-timbang kung giunsa ang mga butang gi-deploy sa Kubernetes. Pananglitan, ang usa ka mayor nga kabalaka sa seguridad nabalaka kung ang imong mga workloads nagdagan ingon usa ka dili admin nga tiggamit. Sa kini nga kaso, tingali kinahanglan naton ang mga himan sama sa kompwesto, YAML/JSON validator, dugang pa Bukas nga Ahente sa Polisiya, usa ka validator sa palisiya aron masiguro nga ang konteksto Konteksto sa Seguridad ang imong mga workloads dili motugot sa sudlanan nga modagan nga adunay mga pribilehiyo sa tagdumala. Kung gikinahanglan kini, ang mga tiggamit mahimo’g magamit ang usa ka yano nga palisiya kanal, sama niini:

package main

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

  • Mga kapilian alang sa panagsama sa usa ka cloud provider. Usa sa labing inila nga uso sa taas nga teknolohiya karon mao ang pagpadagan sa mga workloads sa mga public cloud providers. Paggamit sa sangkap cloud-provider Gitugotan sa Kubernetes ang bisan unsang cluster nga mahiusa sa cloud provider diin kini nagdagan. Pananglitan, kung ang usa ka user nagpadagan sa usa ka aplikasyon sa Kubernetes sa AWS ug gusto nga ibutyag kana nga aplikasyon pinaagi sa usa ka serbisyo, ang cloud provider nagtabang sa awtomatikong paghimo sa serbisyo. LoadBalancernga awtomatikong maghatag sa load balancer Amazon Elastic Load Balanceraron ma-redirect ang trapiko sa mga pod sa aplikasyon.

Pagpalapad

Ang Kubernetes kay extensible kaayo ug ganahan ang mga developers niini. Adunay usa ka set sa magamit nga mga kapanguhaan sama sa mga pod, pag-deploy, StatefulSets, mga sekreto, ConfigMaps, ug uban pa. Tinuod, ang mga tiggamit ug mga developer makadugang sa ubang mga kapanguhaan sa porma custom nga mga kahulugan sa kapanguhaan.

Pananglitan, kung gusto namon nga ipasabut ang usa ka kapanguhaan CronTab, unya mahimo nimong buhaton sama niini:

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

Sa ulahi makahimo kita og usa ka kapanguhaan sa CronTab sama niini:

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

Ang laing kapilian alang sa pagpalapad sa Kubernetes mao nga ang developer makasulat sa iyang kaugalingong mga pahayag. Operator maoy usa ka espesyal nga proseso sa Kubernetes cluster nga naglihok sumala sa “kontrol nga sirkito" Uban sa tabang sa usa ka operator, ang user makahimo sa pag-automate sa pagdumala sa mga CRD (custom resource definitions) pinaagi sa pagbayloay og impormasyon sa Kubernetes API.

Adunay daghang mga himan sa komunidad nga nagpasayon ​​sa mga developers sa paghimo sa ilang kaugalingong mga operator. Lakip kanila- Framework sa Operator ug iyang Operator SDK. Kini nga SDK naghatag og pundasyon diin ang usa ka developer dali nga makasugod sa paghimo og operator. Ingnon ta nga makasugod ka gikan sa command line nga sama niini:

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

Kini nagmugna sa tanang boilerplate code para sa imong operator, lakip ang YAML files ug Golang code:

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

Dayon mahimo nimong idugang ang gikinahanglan nga mga API ug controller, sama niini:

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

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

Unya, sa katapusan, tiguma ang operator ug ipadala kini sa rehistro sa imong sudlanan:

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

Kung gusto sa developer ang dugang nga kontrol, ang boilerplate code sa mga file sa Go mahimong usbon. Pananglitan, aron mabag-o ang mga detalye sa controller, mahimo kang magbag-o sa file controller.go.

Laing proyekto BISAN ASA, nagtugot kanimo sa paghimo og mga pahayag gamit lamang ang deklaratibo nga YAML nga mga file. Pananglitan, ang usa ka operator alang sa Apache Kafka mahimong gihubit nga gibanabana mao nga. Uban niini, mahimo nimong i-install ang usa ka cluster sa Kafka sa ibabaw sa Kubernetes nga adunay pipila lang nga mga mando:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ug dayon i-configure kini gamit ang laing sugo:

$ 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

Pag-bag-o

Sulod sa milabay nga pipila ka tuig, ang mga dagkong pagpagawas sa Kubernetes mogawas matag pipila ka bulan - nga mao, tulo ngadto sa upat ka dagkong pagpagawas kada tuig. Ang gidaghanon sa mga bag-ong feature nga gipaila sa matag usa niini dili mokunhod. Dugang pa, wala'y mga timailhan sa paghinay bisan niining lisud nga mga panahon - tan-awa kung unsa ang kahimtang karon Kubernetes nga kalihokan sa proyekto sa Github.

Gitugotan ka sa bag-ong mga kapabilidad nga labi ka dali nga mag-cluster nga mga operasyon sa lainlaing mga karga sa trabaho. Dugang pa, ang mga programmer nakatagamtam og mas dako nga kontrol sa diha nga ang pagpadala sa mga aplikasyon direkta ngadto sa produksyon.

Komunidad

Ang laing dakong aspeto sa pagkapopular sa Kubernetes mao ang kalig-on sa komunidad niini. Sa 2015, sa pagkab-ot sa bersyon 1.0, ang Kubernetes gi-sponsor ni Cloud Native Computing Foundation.

Adunay usab lainlaing mga komunidad SIG (Mga Espesyal nga Interes nga Grupo) naka-focus sa pagtrabaho sa lainlaing mga lugar sa Kubernetes samtang ang proyekto nag-uswag. Kini nga mga grupo kanunay nga nagdugang bag-ong mga bahin, nga naghimo sa pagtrabaho kauban ang Kubernetes nga labi ka kombenyente ug kombenyente.

Ang Cloud Native Foundation nag-host usab sa CloudNativeCon/KubeCon, nga, sa panahon sa pagsulat, mao ang pinakadako nga open source nga komperensya sa kalibutan. Kasagaran nga gihimo tulo ka beses sa usa ka tuig, naghiusa kini sa libu-libo nga mga propesyonal nga gusto nga pauswagon ang Kubernetes ug ang ekosistema niini, ingon usab pagkat-on sa mga bag-ong bahin nga makita matag tulo ka bulan.

Dugang pa, ang Cloud Native Foundation adunay Komite sa Pagdumala sa Teknikal, nga, uban sa mga SIG, nagrepaso sa bag-o ug anaa na mga proyekto pondo nga naka-focus sa cloud ecosystem. Kadaghanan niini nga mga proyekto makatabang sa pagpalambo sa mga kusog sa Kubernetes.

Sa katapusan, nagtuo ko nga ang Kubernetes dili magmalampuson kung wala ang mahunahunaon nga mga paningkamot sa tibuuk nga komunidad, diin ang mga tawo naghiusa apan sa samang higayon nag-abiabi sa mga bag-ong nangabot sa panon.

Ang Kaugmaon

Usa sa mga nag-unang hagit nga kinahanglan atubangon sa mga developer sa umaabot mao ang abilidad sa pag-focus sa mga detalye sa code mismo, ug dili sa imprastraktura diin kini nagdagan. Nakatagbo kini nga mga uso walay server nga paradigma sa arkitektura, nga usa sa mga nanguna karon. Ang mga advanced frameworks anaa na, e.g. kabatid и OpenFaas, nga naggamit sa Kubernetes aron makuha ang imprastraktura gikan sa developer.

Niining artikuloha, gikubkob ra namo ang nawong sa kasamtangang kahimtang sa Kubernetes—sa pagkatinuod, tumoy lang kini sa iceberg. Ang mga tiggamit sa Kubernetes adunay daghang uban pang mga kapanguhaan, kapabilidad, ug mga pag-configure nga ilang magamit.

Source: www.habr.com

Idugang sa usa ka comment