Ynglŷn â phoblogrwydd cynyddol Kubernetes

Hei Habr!

Ar ddiwedd yr haf, rydym am eich atgoffa ein bod yn parhau i weithio ar y pwnc Kubernetes a phenderfynodd gyhoeddi erthygl o Stackoverflow yn dangos y sefyllfa yn y prosiect hwn ddechrau mis Mehefin.

Ynglŷn â phoblogrwydd cynyddol Kubernetes

Mwynhewch ddarllen!

Ar adeg ysgrifennu'r erthygl hon, oedran Kubernetes yw tua. chwe blwydd oed, a thros y ddwy flynedd ddiwethaf mae ei boblogrwydd wedi cynyddu cymaint nes ei fod wedi'i restru'n gyson ymhlith hoff mwyaf llwyfannau. Mae Kubernetes yn drydydd eleni. I grynhoi: Mae Kubernetes yn blatfform sydd wedi'i gynllunio i redeg a threfnu llwythi gwaith mewn cynwysyddion.

Dechreuodd cynwysyddion fel dyluniad arbennig ar gyfer ynysu prosesau yn Linux; cynwysyddion wedi'u cynnwys ers 2007 cgroups, ac ers 2002 – gofodau enwau. Cynlluniwyd cynwysyddion hyd yn oed yn well erbyn 2008, pan ddaeth ar gael LXC, a datblygodd Google ei fecanwaith corfforaethol mewnol ei hun o'r enw Borg, lle “gwneir yr holl waith mewn cynwysyddion.” O'r fan hon rydym yn symud ymlaen yn gyflym i 2013, pan ryddhawyd Docker am y tro cyntaf, a daeth cynwysyddion yn ddatrysiad màs poblogaidd o'r diwedd. Ar y pryd, y prif offeryn ar gyfer offeryniaeth cynhwysydd oedd Mesos, er nad oedd yn wyllt boblogaidd. Rhyddhawyd Kubernetes gyntaf yn 2015, ac ar ôl hynny daeth yr offeryn hwn yn safon de facto ym maes offeryniaeth cynwysyddion.

Er mwyn ceisio deall pam mae Kubernetes mor boblogaidd, gadewch i ni geisio ateb ychydig o gwestiynau. Pryd oedd y tro diwethaf i ddatblygwyr allu cytuno ar sut i ddefnyddio ceisiadau i gynhyrchu? Faint o ddatblygwyr ydych chi'n gwybod sy'n defnyddio'r offer gan eu bod yn cael eu darparu allan o'r bocs? Faint o weinyddwyr cwmwl sydd yna heddiw nad ydyn nhw'n deall sut mae cymwysiadau'n gweithio? Byddwn yn edrych ar yr atebion i'r cwestiynau hyn yn yr erthygl hon.

Isadeiledd fel YAML

Yn y byd a aeth o Puppet and Chef i Kubernetes, un o’r newidiadau mwyaf oedd symud o “seilwaith fel cod” i “seilwaith fel data”—yn benodol, fel YAML. Mae'n hawdd disgrifio'r holl adnoddau yn Kubernetes, sy'n cynnwys codennau, ffurfweddiadau, enghreifftiau a ddefnyddir, cyfrolau, ac ati, mewn ffeil YAML. Er enghraifft:

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

Mae'r farn hon yn ei gwneud hi'n haws i weithwyr proffesiynol DevOps neu SRE fynegi eu llwythi gwaith yn llawn heb orfod ysgrifennu cod mewn ieithoedd fel Python neu Javascript.

Mae manteision eraill trefnu seilwaith fel data yn cynnwys:

  • Rheoli Fersiwn Gweithrediadau GitOps neu Git. Mae'r dull hwn yn caniatáu ichi gadw holl ffeiliau Kubernetes YAML mewn ystorfeydd git, fel y gallwch olrhain yn union pryd y gwnaed newid, pwy a'i gwnaeth, a beth yn union newidiodd. Mae hyn yn cynyddu tryloywder gweithrediadau ledled y sefydliad ac yn gwella effeithlonrwydd gweithredol trwy ddileu amwysedd, yn enwedig lle dylai gweithwyr chwilio am yr adnoddau sydd eu hangen arnynt. Ar yr un pryd, mae'n dod yn haws gwneud newidiadau i adnoddau Kubernetes yn awtomatig trwy gyfuno cais tynnu.
  • Scalability. Pan ddiffinnir adnoddau fel YAML, mae'n dod yn hynod hawdd i weithredwyr clwstwr newid un neu ddau o rifau mewn adnodd Kubernetes, a thrwy hynny newid sut mae'n graddio. Mae Kubernetes yn darparu mecanwaith ar gyfer graddio codennau'n awtomatig yn llorweddol, y gellir ei ddefnyddio i benderfynu'n gyfleus beth yw'r nifer lleiaf ac uchaf o godennau sydd eu hangen mewn cyfluniad lleoli penodol i drin lefelau isel ac uchel o draffig. Er enghraifft, os ydych wedi defnyddio cyfluniad sy'n gofyn am gapasiti ychwanegol oherwydd cynnydd sydyn mewn traffig, yna gellir newid maxReplicas o 10 i 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

  • Diogelwch a rheolaeth. Mae YAML yn wych ar gyfer gwerthuso sut mae pethau'n cael eu defnyddio yn Kubernetes. Er enghraifft, mae pryder diogelwch mawr yn ymwneud ag a yw eich llwythi gwaith yn rhedeg fel defnyddiwr nad yw'n weinyddwr. Yn yr achos hwn, efallai y bydd angen offer fel ymryson, dilyswr YAML/JSON, plws Agored Asiant Polisi, dilyswr polisi i sicrhau bod y cyd-destun DiogelwchCyd-destun nid yw eich llwythi gwaith yn caniatáu i'r cynhwysydd redeg gyda breintiau gweinyddwr. Os oes angen hyn, gall defnyddwyr gymhwyso polisi syml Rwy'n gweddio, fel hyn:

package main

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

  • Opsiynau ar gyfer integreiddio â darparwr cwmwl. Un o'r tueddiadau mwyaf nodedig yn y dechnoleg uchel heddiw yw rhedeg llwythi gwaith ar ddarparwyr cwmwl cyhoeddus. Gan ddefnyddio'r gydran cwmwl-darparwr Mae Kubernetes yn caniatáu i unrhyw glwstwr integreiddio â'r darparwr cwmwl y mae'n rhedeg arno. Er enghraifft, os yw defnyddiwr yn rhedeg cymhwysiad yn Kubernetes ar AWS ac eisiau datgelu'r cymhwysiad hwnnw trwy wasanaeth, mae darparwr y cwmwl yn helpu i greu'r gwasanaeth yn awtomatig LoadBalancera fydd yn darparu'r cydbwysedd llwyth yn awtomatig Cydbwysedd Llwyth Elastig Amazoni ailgyfeirio traffig i godau cais.

Expandability

Mae Kubernetes yn estynadwy iawn ac mae datblygwyr wrth eu bodd. Mae set o adnoddau ar gael fel codennau, gosodiadau, StatefulSets, cyfrinachau, ConfigMaps, etc. Yn wir, gall defnyddwyr a datblygwyr ychwanegu adnoddau eraill yn y ffurflen diffiniadau adnoddau wedi'u teilwra.

Er enghraifft, os ydym am ddiffinio adnodd CronTab, yna fe allech chi wneud rhywbeth fel hyn:

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

Yn ddiweddarach gallwn greu adnodd CronTab rhywbeth fel hyn:

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

Opsiwn arall ar gyfer estynadwyedd yn Kubernetes yw y gall y datblygwr ysgrifennu ei ddatganiadau ei hun. Gweithredwr yn broses arbennig yng nghlwstwr Kubernetes sy'n gweithio yn ôl y “cylched rheoli" Gyda chymorth gweithredwr, gall y defnyddiwr awtomeiddio rheolaeth CRDs (diffiniadau adnoddau personol) trwy gyfnewid gwybodaeth ag API Kubernetes.

Mae yna nifer o offer yn y gymuned sy'n ei gwneud hi'n hawdd i ddatblygwyr greu eu gweithredwyr eu hunain. Yn eu plith - Fframwaith Gweithredwyr a Gweithredwr SDK. Mae'r SDK hwn yn darparu sylfaen y gall datblygwr ddechrau creu gweithredwr yn gyflym ohoni. Gadewch i ni ddweud y gallwch chi ddechrau o'r llinell orchymyn rhywbeth fel hyn:

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

Mae hyn yn creu'r holl god plât boeler ar gyfer eich gweithredwr, gan gynnwys ffeiliau YAML a chod 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

Yna gallwch chi ychwanegu'r APIs a'r rheolydd gofynnol, fel hyn:

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

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

Yna, yn olaf, cydosod y gweithredwr a'i anfon i gofrestrfa eich cynhwysydd:

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

Os yw'r datblygwr eisiau hyd yn oed mwy o reolaeth, gellir newid y cod plât boeler yn ffeiliau Go. Er enghraifft, i addasu manylion y rheolydd, gallwch wneud newidiadau i'r ffeil controller.go.

Prosiect arall ym mhob man, yn eich galluogi i greu datganiadau gan ddefnyddio ffeiliau YAML datganiadol yn unig. Er enghraifft, byddai gweithredwr ar gyfer Apache Kafka yn cael ei ddiffinio'n fras felly. Ag ef, gallwch chi osod clwstwr Kafka ar ben Kubernetes gyda dim ond cwpl o orchmynion:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ac yna ei ffurfweddu gyda gorchymyn arall:

$ 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

Arloesi

Dros yr ychydig flynyddoedd diwethaf, mae datganiadau mawr Kubernetes wedi bod yn dod allan bob ychydig fisoedd - hynny yw, tri i bedwar datganiad mawr y flwyddyn. Nid yw nifer y nodweddion newydd a gyflwynir ym mhob un ohonynt yn lleihau. Ar ben hynny, nid oes unrhyw arwyddion o arafu hyd yn oed yn y cyfnod anodd hwn - edrychwch beth yw'r sefyllfa nawr Gweithgaredd prosiect Kubernetes ar Github.

Mae galluoedd newydd yn caniatáu ichi glystyru gweithrediadau yn fwy hyblyg ar draws llwythi gwaith amrywiol. Yn ogystal, mae rhaglenwyr yn mwynhau mwy o reolaeth wrth ddefnyddio cymwysiadau yn uniongyrchol i gynhyrchu.

Cymunedol

Agwedd fawr arall ar boblogrwydd Kubernetes yw cryfder ei chymuned. Yn 2015, ar ôl cyrraedd fersiwn 1.0, noddwyd Kubernetes gan Sefydliad Cyfrifiadura Brodorol Cloud.

Mae yna hefyd gymunedau amrywiol SIG (Grwpiau Diddordeb Arbennig) canolbwyntio ar weithio ar wahanol feysydd o Kubernetes wrth i'r prosiect ddatblygu. Mae'r grwpiau hyn yn ychwanegu nodweddion newydd yn gyson, gan wneud gweithio gyda Kubernetes yn fwy cyfleus a chyfleus.

Mae Sefydliad Cloud Native hefyd yn cynnal CloudNativeCon/KubeCon, sydd, ar adeg ysgrifennu, yn gynhadledd ffynhonnell agored fwyaf yn y byd. Yn nodweddiadol, a gynhelir dair gwaith y flwyddyn, mae'n dod â miloedd o weithwyr proffesiynol ynghyd sydd am wella Kubernetes a'i ecosystem, yn ogystal â dysgu nodweddion newydd sy'n ymddangos bob tri mis.

Ar ben hynny, mae gan Cloud Native Foundation Pwyllgor Goruchwylio Technegol, sydd, ynghyd â GGYs, yn adolygu newydd a phresennol prosiectau cronfeydd sy'n canolbwyntio ar yr ecosystem cwmwl. Mae'r rhan fwyaf o'r prosiectau hyn yn helpu i wella cryfderau Kubernetes.

Yn olaf, credaf na fyddai Kubernetes mor llwyddiannus ag y mae heb ymdrechion ymwybodol y gymuned gyfan, lle mae pobl yn glynu at ei gilydd ond ar yr un pryd yn croesawu newydd-ddyfodiaid i'r gorlan.

Y Dyfodol

Un o’r prif heriau y bydd yn rhaid i ddatblygwyr ymdrin ag ef yn y dyfodol yw’r gallu i ganolbwyntio ar fanylion y cod ei hun, ac nid ar y seilwaith y mae’n rhedeg ynddo. Mae'n cwrdd â'r tueddiadau hyn patrwm pensaernïol di-weinydd, sy'n un o'r rhai mwyaf blaenllaw heddiw. Mae fframweithiau uwch eisoes yn bodoli, e.e. cyllell и AgoredFaas, sy'n defnyddio Kubernetes i dynnu'r seilwaith oddi wrth y datblygwr.

Yn yr erthygl hon, dim ond crafu wyneb cyflwr presennol Kubernetes yr ydym wedi'i wneud - mewn gwirionedd, dim ond blaen y mynydd iâ ydyw. Mae gan ddefnyddwyr Kubernetes lawer o adnoddau, galluoedd a chyfluniadau eraill ar gael iddynt.

Ffynhonnell: hab.com

Ychwanegu sylw