Konsènan popilarite k ap grandi nan Kubernetes

Hey Habr!

Nan fen sezon lete an, nou vle raple nou ke nou kontinye travay sou sijè a Kubernetes epi li deside pibliye yon atik ki soti nan Stackoverflow ki montre eta a nan pwojè sa a nan kòmansman mwa jen.

Konsènan popilarite k ap grandi nan Kubernetes

Jwi lekti!

Nan moman ekri atik sa a, laj Kubernetes se approx. sis zan, ak sou de ane ki sot pase yo popilarite li te grandi anpil ke li se toujou klase nan mitan pi renmen platfòm. Kubernetes klase twazyèm ane sa a. Pou rezime: Kubernetes se yon platfòm ki fèt pou kouri ak orchestration chaj travay ki nan kontenè.

Kontenè yo te kòmanse kòm yon konsepsyon espesyal pou izole pwosesis nan Linux; veso yo enkli depi 2007 cgroups, e depi 2002 - namespaces. Kontenè yo te fèt menm pi bon pa 2008, lè li te vin disponib LXC, ak Google devlope pwòp mekanis antrepriz entèn li yo rele Borg, kote "tout travay fèt nan resipyan." Soti isit la nou fè jèn pou 2013, lè premye lage Docker te fèt, ak resipyan finalman te vin tounen yon solisyon mas popilè. Nan tan sa a, zouti prensipal la pou òkestrasyon veso se te Mesos, byenke li pa t 'fò popilè. Kubernetes te premye lage nan 2015, apre sa zouti sa a te vin estanda defakto nan domèn òkestrasyon veso.

Pou eseye konprann poukisa Kubernetes tèlman popilè, ann eseye reponn kèk kesyon. Ki dènye fwa devlopè yo te kapab dakò sou fason pou deplwaye aplikasyon pou pwodiksyon an? Konbyen devlopè ou konnen ki sèvi ak zouti yo jan yo bay yo soti nan bwat la? Konbyen administratè nwaj ki genyen jodi a ki pa konprann kijan aplikasyon yo fonksyone? Nou pral gade repons kesyon sa yo nan atik sa a.

Enfrastrikti kòm YAML

Nan mond lan ki te soti nan Puppet ak Chef pou rive nan Kubernetes, youn nan pi gwo chanjman yo se te deplase soti nan "enfrastrikti kòm kòd" nan "enfrastrikti kòm done"-espesyalman, tankou YAML. Tout resous nan Kubernetes, ki gen ladan gous, konfigirasyon, ka deplwaye, komèsan, elatriye, ka fasil dekri nan yon dosye YAML. Pa egzanp:

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

View sa a fè li pi fasil pou pwofesyonèl DevOps oswa SRE eksprime totalman chaj travay yo san yo pa bezwen ekri kòd nan lang tankou Python oswa Javascript.

Lòt avantaj ki genyen nan òganize enfrastrikti kòm done yo enkli:

  • GitOps oswa kontwòl vèsyon Git Operations. Apwòch sa a pèmèt ou kenbe tout fichye Kubernetes YAML yo nan depo git, konsa ou ka swiv egzakteman ki lè yo te fè yon chanjman, ki moun ki te fè li, ak kisa egzakteman chanje. Sa a ogmante transparans nan operasyon nan tout òganizasyon an ak amelyore efikasite operasyonèl nan elimine anbigwite, patikilyèman nan kote anplwaye yo ta dwe chèche pou resous yo bezwen yo. An menm tan an, li vin pi fasil otomatikman fè chanjman nan resous Kubernetes pa senpleman fusion yon demann rale.
  • Évolutivité. Lè resous yo defini kòm YAML, li vin trè fasil pou operatè gwoup yo chanje youn oswa de nimewo nan yon resous Kubernetes, kidonk chanje fason li echèl. Kubernetes bay yon mekanis pou autoscaling orizontal nan gous, ki ka itilize pou detèmine yon fason fasil ki kantite minimòm ak maksimòm gous yo mande nan yon konfigirasyon deplwaman patikilye pou jere nivo ki ba ak wo nan trafik. Pou egzanp, si ou te deplwaye yon konfigirasyon ki mande kapasite adisyonèl akòz yon ogmantasyon toudenkou nan trafik, Lè sa a, maxReplicas ka chanje soti nan 10 a 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

  • Sekirite ak jesyon. YAML bon pou evalye kijan bagay yo deplwaye nan Kubernetes. Pou egzanp, yon gwo enkyetid sekirite enkyetid si kantite travay ou yo ap kouri kòm yon itilizatè ki pa admin. Nan ka sa a, nou ka bezwen zouti tankou konkou, validateur YAML/JSON, plis Louvri Policy Agent, yon validateur politik asire ke kontèks la SecurityContext chaj travay ou yo pa pèmèt veso a kouri ak privilèj administratè. Si sa nesesè, itilizatè yo ka aplike yon politik ki senp tranche, tankou sa a:

package main

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

  • Opsyon pou entegrasyon ak yon founisè nwaj. Youn nan tandans ki pi remakab nan gwo teknoloji jodi a se kouri chaj travay sou founisè nwaj piblik yo. Sèvi ak eleman an nwaj-founisè Kubernetes pèmèt nenpòt gwoup entegre ak founisè nwaj la sou kote li kouri. Pou egzanp, si yon itilizatè kouri yon aplikasyon nan Kubernetes sou AWS epi li vle ekspoze aplikasyon sa a atravè yon sèvis, founisè nwaj la ede otomatikman kreye sèvis la. LoadBalancer, ki pral otomatikman bay balans chaj la Amazon Elastic Load Balancerpou redireksyon trafik nan gous aplikasyon yo.

Dilatabilite

Kubernetes trè extensible ak devlopè yo renmen li. Gen yon seri resous ki disponib tankou gous, deplwaman, StatefulSets, sekrè, ConfigMaps, elatriye. Se vre, itilizatè yo ak devlopè yo ka ajoute lòt resous nan fòm lan definisyon resous koutim.

Pou egzanp, si nou vle defini yon resous CronTab, Lè sa a, ou ta ka fè yon bagay tankou sa 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

Pita nou ka kreye yon resous CronTab yon bagay tankou sa a:

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

Yon lòt opsyon pou ekstansibilite nan Kubernetes se ke pwomotè a ka ekri deklarasyon pwòp tèt li. Operatè se yon pwosesis espesyal nan gwoup Kubernetes ki travay dapre "sikwi kontwòl" Avèk èd yon operatè, itilizatè a ka otomatize jesyon CRDs (definisyon resous koutim) lè li fè echanj enfòmasyon ak API Kubernetes.

Gen plizyè zouti nan kominote a ki fè li fasil pou devlopè yo kreye pwòp operatè yo. Pami yo - Operatè chapant ak li Operatè SDK. SDK sa a bay yon fondasyon kote yon pwomotè ka byen vit kòmanse kreye yon operatè. Ann di ou ka kòmanse soti nan liy lòd la yon bagay tankou sa a:

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

Sa a kreye tout kòd boilerplate pou operatè ou a, ki gen ladan dosye YAML ak kòd 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

Lè sa a, ou ka ajoute API ki nesesè yo ak kontwolè, tankou sa a:

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

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

Lè sa a, finalman, rasanble operatè a epi voye li nan rejis veso ou a:

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

Si pwomotè a vle menm plis kontwòl, yo ka chanje kòd boilerplate nan Go fichiers. Pou egzanp, modifye spesifik yo nan kontwolè a, ou ka fè chanjman nan dosye a controller.go.

Yon lòt pwojè toupatou, pèmèt ou kreye deklarasyon lè l sèvi avèk sèlman fichye YAML deklaratif. Pou egzanp, yon operatè pou Apache Kafka ta dwe defini apeprè se konsa. Avèk li, ou ka enstale yon gwoup Kafka sou tèt Kubernetes ak jis yon koup nan kòmandman:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Lè sa a, konfigirasyon li ak yon lòt lòd:

$ 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

Inovasyon

Pandan kèk ane ki sot pase yo, gwo lage Kubernetes yo te soti chak kèk mwa - sa vle di, twa a kat gwo lage chak ane. Nimewo a nan karakteristik nouvo prezante nan chak nan yo pa diminye. Anplis, pa gen okenn siy ralanti menm nan moman difisil sa yo - gade nan ki sitiyasyon an kounye a Aktivite pwojè Kubernetes sou Github.

Nouvo kapasite pèmèt ou gwoupe operasyon yo ak plis fleksib nan plizyè kantite travay. Anplis de sa, pwogramasyon yo jwi pi gwo kontwòl lè yo deplwaye aplikasyon dirèkteman nan pwodiksyon an.

Kominote

Yon lòt gwo aspè nan popilarite Kubernetes se fòs kominote li a. Nan 2015, lè yo rive nan vèsyon 1.0, Kubernetes te patwone pa Cloud natif natal Computing Fondasyon.

Genyen tou divès kominote Siyatur (Gwoup Enterè Espesyal) konsantre sou travay sou diferan zòn nan Kubernetes kòm pwojè a evolye. Gwoup sa yo toujou ap ajoute nouvo karakteristik, fè travay ak Kubernetes pi pratik ak pratik.

Cloud Native Foundation tou òganize CloudNativeCon/KubeCon, ki, nan moman sa a, se pi gwo konferans sous louvri nan mond lan. Tipikman fèt twa fwa nan yon ane, li pote ansanm dè milye de pwofesyonèl ki vle amelyore Kubernetes ak ekosistèm li yo, osi byen ke aprann nouvo karakteristik ki parèt chak twa mwa.

Anplis, Cloud Native Foundation gen Komite Sipèvizyon Teknik, ki, ansanm ak SIGs, revize nouvo ak ki deja egziste pwojè yo fon konsantre sou ekosistèm nwaj la. Pifò nan pwojè sa yo ede amelyore fòs Kubernetes.

Finalman, mwen kwè ke Kubernetes pa ta gen menm siksè jan li ye san efò yo konsyan nan tout kominote a, kote moun kole ansanm men an menm tan akeyi fèk vini nan pliye a.

Future

Youn nan defi prensipal yo ke devlopè yo pral gen fè fas ak nan lavni an se kapasite nan konsantre sou detay yo nan kòd la li menm, epi yo pa sou enfrastrikti nan kote li kouri. Li satisfè tandans sa yo paradigm achitekti san sèvè, ki se youn nan dirijan jodi a. Kad avanse deja egziste, pa egzanp. Knatif и OpenFaas, ki sèvi ak Kubernetes pou abstrè enfrastrikti a soti nan pwomotè a.

Nan atik sa a, nou te sèlman grate sifas aktyèl eta Kubernetes-an reyalite, li se jis pwent iceberg la. Itilizatè Kubernetes yo gen anpil lòt resous, kapasite, ak konfigirasyon a dispozisyon yo.

Sous: www.habr.com

Add nouvo kòmantè