Di derbarê mezinbûna populerbûna Kubernetes de

Hey Habr!

Di dawiya havînê de, em dixwazin bînin bîra we ku em li ser mijarê xebata xwe didomînin Kubernetes û biryar da ku gotarek ji Stackoverflow biweşîne ku di destpêka meha Hezîranê de rewşa kar di vê projeyê de nîşan dide.

Di derbarê mezinbûna populerbûna Kubernetes de

Bixwînin!

Di dema nivîsandina vê gotarê de, temenê Kubernetes bi qasî ye. şeş salî, û di van du salên çûyî de populerbûna wê ewqas zêde bûye ku ew bi domdarî di nav de cih digire herî bijare platformên. Kubernetes îsal di rêza sêyemîn de ye. Ji nû ve: Kubernetes platformek e ku ji bo xebitandin û organîzekirina barkêşên konteyneran hatiye çêkirin.

Konteyner wekî sêwiranek taybetî ji bo veqetandina pêvajoyên li Linux-ê dest pê kir; konteynir ji 2007-an vir ve tê de hene cgroups, û ji sala 2002 - cîhên navan. Konteyner heta sala 2008-an hîn çêtir hatine sêwirandin, gava ku ew peyda bû LXC, û Google mekanîzmaya xweya pargîdanî ya hundurîn pêşxist ku jê re tê gotin Borg, ku "hemû kar di konteyneran de têne kirin." Ji vir şûnda em berbi 2013-an ve diçin, gava ku yekem serbestberdana Docker pêk hat, û konteynir di dawiyê de bûn çareseriyek girseyî ya populer. Wê demê amûra sereke ya orkestrasyona konteynir bû Mesos, her çend ew ne pir populer bû. Kubernetes yekem car di sala 2015-an de hate berdan, piştî ku ev amûr di warê orkestrasyona konteynerê de bû standarda de facto.

Ji bo ku hûn fêm bikin ka çima Kubernetes ewqas populer e, em hewl bidin ku bersiva çend pirsan bidin. Cara paşîn kengê bû ku pêşdebiran karîbûn lihev bikin ka meriv çawa serlêdanan li hilberînê bicîh dike? Hûn çend pêşdebiran dizanin ku amûran bikar tînin ji ber ku ew ji qutiyê têne peyda kirin? Îro çend rêvebirên ewr hene ku fêm nakin ka serîlêdan çawa dixebitin? Em ê di vê gotarê de li bersivên van pirsan binêrin.

Binesaziya wekî YAML

Li cîhana ku ji Puppet û Chef berbi Kubernetes-ê ve çû, yek ji guheztinên herî mezin çûyîna ji "binesaziyê wekî kod" berbi "binesaziyê wekî daneyê" bû - bi taybetî, mîna YAML. Hemî çavkaniyên li Kubernetes, ku di nav de pods, veavakirin, mînakên hatine bicîh kirin, cild û hwd hene, dikarin bi hêsanî di pelek YAML de bêne şirove kirin. Bo nimûne:

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

Vê dîtinê ji pisporên DevOps an SRE re hêsantir dike ku bêyî ku kodê bi zimanên mîna Python an Javascript binivîsin, barkêşên xebata xwe bi tevahî diyar bikin.

Feydeyên din ên binesaziya birêxistinkirina wekî daneyan ev in:

  • GitOps an Kontrola Guhertoya Operasyonên Git. Ev nêzîkatî dihêle hûn hemî pelên Kubernetes YAML di depoyên git de bihêlin, ji ber vê yekê hûn dikarin tam bişopînin kengê guherînek hatî çêkirin, kê ew çêkir, û bi rastî çi guherî. Ev şefafîbûna operasyonan li seranserê rêxistinê zêde dike û bi rakirina nezelaliyê re karbidestiya xebitandinê baştir dike, nemaze li cihê ku divê karmend li çavkaniyên ku ew hewce ne bigerin. Di heman demê de, hêsantir dibe ku meriv bixweber di çavkaniyên Kubernetes de guheztinan bi tenê bi yekkirina daxwazek kişandinê re bike.
  • Scalability. Gava ku çavkanî wekî YAML têne destnîşan kirin, ji operatorên komê re pir hêsan dibe ku di çavkaniyek Kubernetes de yek an du hejmar biguhezînin, bi vî rengî pîvana wê biguhezînin. Kubernetes mekanîzmayek ji bo pîvandina xweseriya horizontî ya pods peyda dike, ku dikare were bikar anîn da ku bi rehetî diyar bike ka kîjan herî hindik û herî zêde hejmara podan di veavakirinek vesazkirinê de hewce dike da ku asta seyrûsefera nizm û bilind bigire. Mînakî, heke we veavakirinek ku ji ber pêleke ji nişka ve di seyrûseferê de pêdivî bi kapasîteya zêde hewce dike bicîh kiriye, wê hingê maxReplicas dikare ji 10 ber 20 were guheztin:

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

  • Ewlekarî û rêvebirin. YAML ji bo nirxandina ka tişt li Kubernetes çawa têne bicîh kirin pir girîng e. Mînakî, fikarek ewlehiyê ya sereke ev e ku ka barkêşên we wekî bikarhênerek ne-rêveber têne xebitandin. Di vê rewşê de, dibe ku em hewceyê amûrên wekî contest, YAML/JSON erêker, zêde Nûnerê Siyaseta Vekin, erêkerek siyasetê ye ku pê ewle bibe ku çarçove SecurityContext bargiraniya xebata we nahêle ku konteynir bi mafên rêveberiyê bixebite. Ger ev hewce be, bikarhêner dikarin siyasetek hêsan bicîh bikin Ez dua dikim, welî evê:

package main

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

  • Vebijarkên ji bo entegrasyonê bi pêşkêşkerek ewr re. Yek ji meylên herî berbiçav ên di teknolojiya bilind a îroyîn de ev e ku barkirina xebatê li ser pêşkêşkerên cloudê yên gelemperî bimeşîne. Bikaranîna pêkhatê ewr-pêşkêşker Kubernetes destûrê dide her komê ku bi pêşkêşkara ewr a ku ew lê dimeşîne re yek bibe. Mînakî, heke bikarhênerek li Kubernetes serîlêdanek li ser AWS-ê dimeşîne û bixwaze wê serîlêdanê bi karûbarek eşkere bike, peydakerê ewr bixwe dibe alîkar ku karûbar biafirîne. LoadBalancerku dê bixweber balansa barkirinê peyda bike Balansa Barkirina Elastîk a Amazonji bo beralîkirina seyrûseferê berbi podên serîlêdanê.

Expandability

Kubernetes pir berfireh e û pêşdebir jê hez dikin. Komek çavkaniyên berdest ên wekî pods, belavkirin, StatefulSets, nepenî, ConfigMaps, hwd. Rast e, bikarhêner û pêşdebir dikarin çavkaniyên din di formê de zêde bikin pênaseyên çavkaniya xwerû.

Mînakî, heke em bixwazin çavkaniyek diyar bikin CronTab, hingê hûn dikarin tiştek weha bikin:

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

Dûv re em dikarin çavkaniyek CronTab bi vî rengî biafirînin:

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

Vebijarkek din a berfirehbûna li Kubernetes ev e ku pêşdebir dikare daxuyaniyên xwe binivîsîne. Operator di koma Kubernetes de pêvajoyek taybetî ye ku li gorî "circuit kontrol" Bi arîkariya operatorek, bikarhêner dikare rêveberiya CRD-yan (pênaseyên çavkaniya xwerû) bi danûstandina agahdariya bi API-ya Kubernetes re otomatîk bike.

Di civakê de gelek amûr hene ku ji pêşdebiran re hêsan dike ku operatorên xwe biafirînin. Di nav wan de - Çarçoveya Operator û wî Operator SDK. Ev SDK bingehek peyda dike ku pêşdebirek jê dikare zû dest bi afirandina operatorek bike. Ka em bibêjin hûn dikarin ji rêzika fermanê tiştek mîna vê dest pê bikin:

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

Ev hemî koda boilerplate ji bo operatorê we diafirîne, tevî pelên YAML û koda 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

Dûv re hûn dikarin API û kontrolkerên pêwîst lê zêde bikin, mîna vê:

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

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

Dûv re, di dawiyê de, operatorê bicivîne û wê bişîne qeyda konteynera xwe:

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

Ger pêşdebir hîn bêtir kontrolê bixwaze, koda boilerplate di pelên Go de dikare were guheztin. Mînakî, ji bo guheztina taybetmendiyên kontrolkerê, hûn dikarin pelê biguherînin controller.go.

Projeyek din HERDER, destûrê dide te ku hûn tenê bi karanîna pelên YAML-ê diyarker daxuyaniyan biafirînin. Mînakî, operatorek ji bo Apache Kafka dê bi qasî were diyar kirin wiha. Bi wê re, hûn dikarin bi çend fermanan komek Kafka li ser Kubernetes saz bikin:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Û dûv re wê bi fermanek din ve mîheng bikin:

$ 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

Nûbûn

Di van çend salên çûyî de, serbestberdanên sereke yên Kubernetes her çend mehan carekê derdikevin - ango, salê sê-çar weşanên sereke. Hejmara taybetmendiyên nû yên ku di her yek ji wan de têne destnîşan kirin kêm nabe. Wekî din, di van demên dijwar de jî nîşanên hêdîbûnê tune - binihêrin ka rewş niha çi ye Çalakiya projeya Kubernetes li ser Github.

Kapasîteyên nû dihêlin ku hûn bi nermîtir operasyonên li ser barkêşên cihêreng kom bikin. Digel vê yekê, bernamenûs dema ku serîlêdanan rasterast li hilberînê bicîh dikin, ji kontrolek mezintir kêfxweş dibin.

Civaka

Aliyek din a girîng a populerbûna Kubernetes hêza civata wê ye. Di sala 2015-an de, piştî gihîştina guhertoya 1.0, Kubernetes ji hêla piştgirî bû Weqfa Computing Native Cloud.

Komên cuda jî hene SIG (Grûbên Berjewendiyên Taybet) dema ku proje pêşve diçe bal kişand ser xebata li ser deverên cihêreng ên Kubernetes. Van koman bi domdarî taybetmendiyên nû lê zêde dikin, xebata bi Kubernetes re hêsantir û rehettir dikin.

Weqfa Cloud Native di heman demê de mêvandariya CloudNativeCon/KubeCon jî dike, ku di dema nivîsandinê de, mezintirîn konferansa çavkaniya vekirî ya cîhanê ye. Bi gelemperî salê sê caran tê lidarxistin, ew bi hezaran pisporên ku dixwazin Kubernetes û ekosîstema wê baştir bikin, û hem jî taybetmendiyên nû yên ku her sê mehan carekê xuya dibin fêr bibin, tîne cem hev.

Wekî din, Weqfa Cloud Native heye Komîteya Çavdêriya Teknîkî, ku bi SIG-an re, nû û heyî dinirxîne projeyên fonên li ser ekosîstema ewr sekinîn. Piraniya van projeyan alîkariya baştirkirina hêza Kubernetes dikin.

Di dawiyê de, ez bawer dikim ku Kubernetes bêyî hewildanên hişmendî yên tevahiya civatê, ku mirov li hev disekinin, lê di heman demê de pêşwaziya kesên nûhatî yên di nav qatan de dikin, dê ne ewqas serfiraz be.

Pêşeroj

Yek ji kêşeyên sereke yên ku pêşdebiran dê di pêşerojê de pê re mijûl bibin ev e ku meriv bala xwe bide ser hûrguliyên kodê bixwe, û ne li ser binesaziya ku tê de dimeşe. Ew bi van meylayan re peyda dike paradîgmaya mîmarî ya bê server, ku îro yek ji pêşeng e. Çarçoveyên pêşkeftî jixwe hene, wek mînak. knative и OpenFaas, ku Kubernetes bikar tîne da ku binesaziyê ji pêşdebiran jêbirin.

Di vê gotarê de, me tenê rûyê rewşa heyî ya Kubernetes xêz kir - di rastiyê de, ew tenê serê berfê ye. Bikarhênerên Kubernetes di destê wan de gelek çavkaniyên din, jêhatîbûn û veavakirin hene.

Source: www.habr.com

Add a comment