Nipa awọn dagba gbale ti Kubernetes

Hey Habr!

Ni opin ooru, a fẹ lati leti pe a tẹsiwaju lati ṣiṣẹ lori koko-ọrọ naa Kubernetes ati pinnu lati ṣe atẹjade nkan kan lati Stackoverflow ti n ṣe afihan ipo awọn ọran ni iṣẹ akanṣe yii ni ibẹrẹ Oṣu Karun.

Nipa awọn dagba gbale ti Kubernetes

Gbadun kika!

Ni akoko kikọ nkan yii, ọjọ-ori Kubernetes jẹ isunmọ. omo odun mefa, ati ni ọdun meji sẹhin, olokiki rẹ ti dagba pupọ ti o wa ni ipo igbagbogbo laarin julọ ​​ayanfẹ awọn iru ẹrọ. Kubernetes ni ipo kẹta ni ọdun yii. Lati tun ṣe: Kubernetes jẹ pẹpẹ ti a ṣe apẹrẹ fun ṣiṣiṣẹ ati ṣiṣe awọn ẹru iṣẹ ti a fi sinu apoti.

Awọn apoti bẹrẹ bi apẹrẹ pataki fun awọn ilana ipinya ni Linux; awọn apoti ti wa lati ọdun 2007 awọn ẹgbẹ, ati niwon 2002 – namespaces. A ṣe apẹrẹ awọn apoti paapaa dara julọ nipasẹ ọdun 2008, nigbati o wa LXC, ati Google ṣe agbekalẹ ilana ile-iṣẹ ti inu ti ara rẹ ti a pe borg, nibiti “gbogbo iṣẹ ti wa ni ṣiṣe ni awọn apoti.” Lati ibi yii a yara siwaju si ọdun 2013, nigbati itusilẹ akọkọ ti Docker waye, ati awọn apoti nikẹhin di ojutu ibi-pupọ olokiki. Ni akoko yẹn, ohun elo akọkọ fun orchestration eiyan jẹ Mesos, biotilejepe o je ko wildly gbajumo. Kubernetes ni akọkọ tu silẹ ni ọdun 2015, lẹhin eyi ọpa yii di boṣewa de facto ni aaye ti orchestration eiyan.

Lati gbiyanju lati ni oye idi ti Kubernetes jẹ olokiki pupọ, jẹ ki a gbiyanju lati dahun awọn ibeere diẹ. Nigbawo ni akoko ikẹhin ti awọn olupilẹṣẹ ni anfani lati gba lori bi o ṣe le ran awọn ohun elo lọ si iṣelọpọ? Awọn olupilẹṣẹ melo ni o mọ ti wọn lo awọn irinṣẹ bi wọn ti pese lati inu apoti? Awọn alakoso awọsanma melo ni o wa loni ti ko loye bi awọn ohun elo ṣe n ṣiṣẹ? A máa wo ìdáhùn sáwọn ìbéèrè yìí nínú àpilẹ̀kọ yìí.

Amayederun bi YAML

Ni agbaye ti o lọ lati Puppet ati Chef si Kubernetes, ọkan ninu awọn iyipada ti o tobi julọ ni gbigbe lati "awọn amayederun bi koodu" si "awọn amayederun bi data" - pataki, bi YAML. Gbogbo awọn orisun ni Kubernetes, eyiti o pẹlu awọn adarọ-ese, awọn atunto, awọn iṣẹlẹ ti a fi ranṣẹ, awọn iwọn didun, ati bẹbẹ lọ, le ni irọrun ṣapejuwe ninu faili YAML kan. Fun apere:

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

Wiwo yii jẹ ki o rọrun fun DevOps tabi awọn alamọja SRE lati ṣafihan awọn iṣẹ ṣiṣe wọn ni kikun laisi nini lati kọ koodu ni awọn ede bii Python tabi Javascript.

Awọn anfani miiran ti siseto awọn amayederun bi data pẹlu:

  • GitOps tabi Iṣakoso Ẹya Awọn iṣẹ Git. Ọna yii ngbanilaaye lati tọju gbogbo awọn faili Kubernetes YAML ni awọn ibi ipamọ git, nitorinaa o le tọpinpin deede nigbati iyipada kan, tani ṣe, ati kini iyipada gangan. Eyi ṣe alekun akoyawo ti awọn iṣẹ jakejado agbari ati ilọsiwaju ṣiṣe ṣiṣe nipasẹ imukuro aibikita, pataki ni ibiti awọn oṣiṣẹ yẹ ki o wa awọn orisun ti wọn nilo. Ni akoko kanna, o rọrun lati ṣe awọn ayipada laifọwọyi si awọn orisun Kubernetes nipa sisọpọ ibeere fifa kan.
  • Scalability. Nigbati awọn orisun ti wa ni asọye bi YAML, o di irọrun pupọ fun awọn oniṣẹ iṣupọ lati yi awọn nọmba kan tabi meji pada ni orisun Kubernetes kan, nitorinaa yiyipada bii o ṣe iwọn. Kubernetes pese ẹrọ kan fun autoscaling petele ti awọn adarọ-ese, eyiti o le ṣee lo lati ni irọrun pinnu kini o kere julọ ati nọmba ti o pọju ti awọn adarọ-ese ni a nilo ni iṣeto imuṣiṣẹ kan pato lati mu awọn ipele kekere ati giga ti ijabọ. Fun apẹẹrẹ, ti o ba ti gbe iṣeto kan ti o nilo afikun agbara nitori iwasoke lojiji ni ijabọ, lẹhinna maxReplicas le yipada lati 10 si 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

  • Aabo ati isakoso. YAML jẹ nla fun iṣiro bi a ṣe fi awọn nkan ranṣẹ ni Kubernetes. Fun apẹẹrẹ, ibakcdun aabo pataki kan boya awọn ẹru iṣẹ rẹ nṣiṣẹ bi olumulo ti kii ṣe alabojuto. Ni idi eyi, a le nilo awọn irinṣẹ bii idije, YAML/JSON afọwọsi, pẹlu Ṣii Aṣoju Afihan, a imulo validator lati rii daju wipe o tọ AaboContext awọn ẹru iṣẹ rẹ ko gba apoti laaye lati ṣiṣẹ pẹlu awọn anfani alabojuto. Ti eyi ba nilo, awọn olumulo le lo eto imulo ti o rọrun yàrà, bi eleyi:

package main

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

  • Awọn aṣayan fun iṣọpọ pẹlu olupese awọsanma. Ọkan ninu awọn aṣa ti o ṣe akiyesi julọ ni imọ-ẹrọ giga ti ode oni ni lati ṣiṣẹ awọn ẹru iṣẹ lori awọn olupese awọsanma gbangba. Lilo paati awọsanma-olupese Kubernetes ngbanilaaye iṣupọ eyikeyi lati ṣepọ pẹlu olupese awọsanma lori eyiti o nṣiṣẹ. Fun apẹẹrẹ, ti olumulo ba nṣiṣẹ ohun elo kan ni Kubernetes lori AWS ati pe o fẹ lati fi ohun elo yẹn han nipasẹ iṣẹ kan, olupese awọsanma n ṣe iranlọwọ laifọwọyi ṣẹda iṣẹ naa. LoadBalancereyi ti yoo laifọwọyi pese awọn fifuye iwontunwonsi Amazon Rirọ Iwontunws.funfunlati darí ijabọ si awọn adarọ-ese ohun elo.

Expandability

Kubernetes jẹ extensible pupọ ati awọn olupilẹṣẹ fẹran rẹ. Eto awọn orisun to wa gẹgẹbi awọn adarọ-ese, awọn imuṣiṣẹ, StatefulSets, asiri, ConfigMaps, ati be be lo. Otitọ, awọn olumulo ati awọn olupilẹṣẹ le ṣafikun awọn orisun miiran ni fọọmu naa aṣa awọn oluşewadi itumo.

Fun apẹẹrẹ, ti a ba fẹ lati ṣalaye orisun kan CronTab, lẹhinna o le ṣe nkan bi eyi:

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

Nigbamii a le ṣẹda ohun elo CronTab nkankan bi eleyi:

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

Aṣayan miiran fun extensibility ni Kubernetes ni pe olupilẹṣẹ le kọ awọn alaye tirẹ. Oniṣẹ jẹ ilana pataki kan ninu iṣupọ Kubernetes ti o ṣiṣẹ ni ibamu si “Iṣakoso Circuit" Pẹlu iranlọwọ ti oniṣẹ ẹrọ, olumulo le ṣe adaṣe iṣakoso ti awọn CRD (awọn asọye orisun orisun) nipa paarọ alaye pẹlu Kubernetes API.

Awọn irinṣẹ lọpọlọpọ wa ni agbegbe ti o jẹ ki o rọrun fun awọn olupilẹṣẹ lati ṣẹda awọn oniṣẹ tiwọn. Lára wọn - Ilana onišẹ ati awọn tirẹ SDK onišẹ. SDK yii n pese ipilẹ lati eyiti olupilẹṣẹ kan le yara bẹrẹ ṣiṣẹda oniṣẹ kan. Jẹ ki a sọ pe o le bẹrẹ lati laini aṣẹ bii eyi:

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

Eyi ṣẹda gbogbo koodu igbomikana fun oniṣẹ ẹrọ rẹ, pẹlu awọn faili YAML ati 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

Lẹhinna o le ṣafikun awọn API ti o nilo ati oludari, bii eyi:

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

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

Lẹhinna, nikẹhin, pe oniṣẹ ẹrọ naa ki o firanṣẹ si iforukọsilẹ ti apoti rẹ:

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

Ti olupilẹṣẹ ba fẹ iṣakoso diẹ sii, koodu igbomikana ni awọn faili Go le yipada. Fun apẹẹrẹ, lati yipada awọn pato ti oludari, o le ṣe awọn ayipada si faili naa controller.go.

Miiran ise agbese NIBI GBOGBO, gba ọ laaye lati ṣẹda awọn alaye nipa lilo awọn faili YAML asọye nikan. Fun apẹẹrẹ, oniṣẹ ẹrọ fun Apache Kafka yoo jẹ asọye isunmọ bẹ. Pẹlu rẹ, o le fi iṣupọ Kafka sori oke Kubernetes pẹlu awọn aṣẹ meji kan:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Ati lẹhinna tunto rẹ pẹlu aṣẹ miiran:

$ 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

Ni awọn ọdun diẹ sẹhin, awọn idasilẹ Kubernetes pataki ti n jade ni gbogbo oṣu diẹ - iyẹn ni, awọn idasilẹ pataki mẹta si mẹrin fun ọdun kan. Nọmba awọn ẹya tuntun ti a ṣe sinu ọkọọkan wọn ko dinku. Pẹlupẹlu, ko si awọn ami ti idinku paapaa ni awọn akoko iṣoro wọnyi - wo kini ipo naa jẹ bayi Kubernetes iṣẹ akanṣe lori Github.

Awọn agbara titun gba ọ laaye lati ni irọrun diẹ sii awọn iṣẹ iṣupọ kọja awọn ẹru iṣẹ lọpọlọpọ. Ni afikun, awọn pirogirama gbadun iṣakoso ti o tobi julọ nigbati o ba nfi awọn ohun elo ranṣẹ taara si iṣelọpọ.

Agbegbe

Apa pataki miiran ti olokiki Kubernetes ni agbara ti agbegbe rẹ. Ni ọdun 2015, nigbati o de ẹya 1.0, Kubernetes ti ṣe atilẹyin nipasẹ Awọsanma Native Computing Foundation.

Orisirisi agbegbe tun wa SIG (Awọn ẹgbẹ Awọn anfani pataki) lojutu lori ṣiṣẹ lori awọn agbegbe oriṣiriṣi ti Kubernetes bi iṣẹ akanṣe ti n dagbasoke. Awọn ẹgbẹ wọnyi n ṣafikun awọn ẹya tuntun nigbagbogbo, ṣiṣe ṣiṣẹ pẹlu Kubernetes diẹ rọrun ati irọrun.

Cloud Native Foundation tun gbalejo CloudNativeCon/KubeCon, eyiti, ni akoko kikọ, jẹ apejọ orisun ṣiṣi ti o tobi julọ ni agbaye. Ni igbagbogbo waye ni igba mẹta ni ọdun, o ṣajọpọ ẹgbẹẹgbẹrun awọn alamọja ti o fẹ lati mu Kubernetes dara si ati ilolupo rẹ, ati kọ ẹkọ awọn ẹya tuntun ti o han ni gbogbo oṣu mẹta.

Pẹlupẹlu, Cloud Native Foundation ni Imọ Abojuto igbimo, eyi ti, paapọ pẹlu SIGs, agbeyewo titun ati ki o ti wa tẹlẹ awọn iṣẹ akanṣe owo lojutu lori awọsanma ilolupo. Pupọ julọ awọn iṣẹ akanṣe ṣe iranlọwọ mu awọn agbara ti Kubernetes dara si.

Nikẹhin, Mo gbagbọ pe Kubernetes kii yoo ni aṣeyọri bi o ti jẹ laisi awọn igbiyanju ti o ni imọran ti gbogbo agbegbe, nibiti awọn eniyan fi ara wọn papọ ṣugbọn ni akoko kanna ṣe itẹwọgba awọn titun sinu agbo.

Ojo iwaju

Ọkan ninu awọn italaya akọkọ ti awọn olupilẹṣẹ yoo ni lati koju ni ọjọ iwaju ni agbara lati dojukọ awọn alaye ti koodu funrararẹ, kii ṣe lori awọn amayederun ninu eyiti o nṣiṣẹ. O pade awọn aṣa wọnyi serverless ayaworan paradig, eyi ti o jẹ ọkan ninu awọn asiwaju loni. Awọn ilana to ti ni ilọsiwaju ti wa tẹlẹ, fun apẹẹrẹ. Ogbe и ṢiiFaas, eyi ti o lo Kubernetes lati áljẹbrà awọn amayederun lati awọn Olùgbéejáde.

Ninu àpilẹkọ yii, a ti yọ dada ti ipo lọwọlọwọ ti Kubernetes — ni otitọ, o kan jẹ sample ti yinyin. Awọn olumulo Kubernetes ni ọpọlọpọ awọn orisun miiran, awọn agbara, ati awọn atunto ni ọwọ wọn.

orisun: www.habr.com

Fi ọrọìwòye kun