Kuhusu umaarufu unaokua wa Kubernetes

Habari Habr!

Mwishoni mwa majira ya joto, tunataka kukukumbusha kwamba tunaendelea kufanya kazi kwenye mada Mabernet na kuamua kuchapisha makala kutoka kwa Stackoverflow inayoonyesha hali ya mambo katika mradi huu mwanzoni mwa Juni.

Kuhusu umaarufu unaokua wa Kubernetes

Furahia kusoma!

Wakati wa kuandika nakala hii, umri wa Kubernetes ni takriban. umri wa miaka sita, na zaidi ya miaka miwili iliyopita umaarufu wake umekua sana hivi kwamba mara kwa mara umewekwa kati ya inayopendwa zaidi majukwaa. Kubernetes inashika nafasi ya tatu mwaka huu. Kwa muhtasari: Kubernetes ni jukwaa iliyoundwa kwa ajili ya kuendesha na kupanga mizigo ya kazi iliyo na vyombo.

Vyombo vilianza kama muundo maalum wa kutenganisha michakato katika Linux; kontena zimejumuishwa tangu 2007 vikundi, na tangu 2002 - nafasi za majina. Vyombo viliundwa vyema zaidi kufikia 2008, ilipopatikana LXC, na Google ilitengeneza utaratibu wake wa ndani wa shirika unaoitwa Borg, ambapo “kazi yote hufanywa katika vyombo.” Kuanzia hapa tunasonga mbele hadi 2013, wakati kutolewa kwa kwanza kwa Docker kulifanyika, na vyombo hatimaye vikawa suluhisho maarufu la misa. Wakati huo, chombo kikuu cha ochestration ya chombo kilikuwa Mesos, ingawa hakuwa maarufu sana. Kubernetes ilitolewa kwa mara ya kwanza mnamo 2015, baada ya hapo chombo hiki kikawa kiwango cha ukweli katika uwanja wa orchestration ya kontena.

Ili kujaribu kuelewa kwa nini Kubernetes ni maarufu sana, hebu jaribu kujibu maswali machache. Ni lini mara ya mwisho wasanidi programu waliweza kukubaliana kuhusu jinsi ya kupeleka maombi kwenye uzalishaji? Je! ni wasanidi wangapi unaowajua wanaotumia zana kama zinatolewa nje ya boksi? Je, kuna wasimamizi wangapi wa wingu leo ​​ambao hawaelewi jinsi programu zinavyofanya kazi? Tutaangalia majibu ya maswali haya katika makala hii.

Miundombinu kama YAML

Katika ulimwengu ambao ulitoka kwa Puppet na Chef hadi Kubernetes, mojawapo ya mabadiliko makubwa zaidi ilikuwa kuhama kutoka "miundombinu kama kanuni" hadi "miundombinu kama data" - hasa, kama YAML. Rasilimali zote katika Kubernetes, ambazo ni pamoja na maganda, usanidi, matukio yaliyotumwa, juzuu, n.k., zinaweza kuelezewa kwa urahisi katika faili ya YAML. Kwa mfano:

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

Mtazamo huu hurahisisha huduma za DevOps au SRE kueleza kikamilifu mzigo wao wa kazi bila kulazimika kuandika msimbo katika lugha kama vile Python au Javascript.

Faida zingine za kuandaa miundombinu kama data ni pamoja na:

  • GitOps au Udhibiti wa Toleo la Uendeshaji wa Git. Mbinu hii hukuruhusu kuweka faili zote za Kubernetes YAML kwenye hazina za git, ili uweze kufuatilia haswa ni lini mabadiliko yalifanywa, ni nani aliyeyafanya, na ni nini hasa kilibadilika. Hii huongeza uwazi wa utendakazi katika shirika lote na inaboresha ufanisi wa utendaji kazi kwa kuondoa utata, hasa pale ambapo wafanyakazi wanapaswa kutafuta rasilimali wanazohitaji. Wakati huo huo, inakuwa rahisi kufanya mabadiliko kiotomatiki kwa rasilimali za Kubernetes kwa kuunganisha tu ombi la kuvuta.
  • Scalability. Rasilimali zinapofafanuliwa kama YAML, inakuwa rahisi sana kwa waendeshaji nguzo kubadilisha nambari moja au mbili katika rasilimali ya Kubernetes, na hivyo kubadilisha jinsi inavyoweka mizani. Kubernetes hutoa utaratibu wa kuongeza maganda kiotomatiki kwa mlalo, ambayo inaweza kutumika kubainisha kwa urahisi ni kiwango gani cha chini na cha juu zaidi cha maganda kinachohitajika katika usanidi mahususi wa kupeleka kushughulikia viwango vya chini na vya juu vya trafiki. Kwa mfano, ikiwa umeweka usanidi ambao unahitaji uwezo wa ziada kwa sababu ya kuongezeka kwa ghafla kwa trafiki, basi maxReplicas inaweza kubadilishwa kutoka 10 hadi 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

  • Usalama na usimamizi. YAML ni nzuri kwa kutathmini jinsi mambo yanasambazwa katika Kubernetes. Kwa mfano, suala kuu la usalama linahusu ikiwa mzigo wako wa kazi unaendeshwa kama mtumiaji asiye msimamizi. Katika kesi hii, tunaweza kuhitaji zana kama vile pambano, kithibitishaji cha YAML/JSON, pamoja na Fungua Wakala wa Sera, kiidhinishi cha sera ili kuhakikisha kuwa muktadha Muktadha wa Usalama mzigo wako wa kazi hauruhusu chombo kufanya kazi na haki za msimamizi. Ikiwa hii itahitajika, watumiaji wanaweza kutumia sera rahisi naomba, kama hii:

package main

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

  • Chaguzi za kuunganishwa na mtoaji wa wingu. Mojawapo ya mitindo inayojulikana zaidi katika teknolojia ya kisasa ya juu ni kuendesha mzigo wa kazi kwa watoa huduma za wingu za umma. Kutumia sehemu mtoa huduma ya wingu Kubernetes huruhusu nguzo yoyote kuunganishwa na mtoaji wa huduma ya wingu ambayo inaendeshwa. Kwa mfano, ikiwa mtumiaji ataendesha programu katika Kubernetes kwenye AWS na anataka kufichua programu hiyo kupitia huduma, mtoa huduma wa wingu husaidia kuunda huduma kiotomatiki. LoadBalancerambayo itatoa moja kwa moja kusawazisha mzigo Amazon Elastic Load Balancerkuelekeza trafiki kwenye maganda ya programu.

Kupanuka

Kubernetes inapanuka sana na watengenezaji wanaipenda. Kuna seti ya rasilimali zinazopatikana kama vile maganda, usambazaji, StatefulSets, siri, ConfigMaps, na kadhalika. Kweli, watumiaji na watengenezaji wanaweza kuongeza rasilimali nyingine katika fomu ufafanuzi wa rasilimali maalum.

Kwa mfano, ikiwa tunataka kufafanua rasilimali CronTab, basi unaweza kufanya kitu kama hiki:

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

Baadaye tunaweza kuunda rasilimali ya CronTab kitu kama hiki:

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

Chaguo jingine la upanuzi katika Kubernetes ni kwamba msanidi programu anaweza kuandika taarifa zake mwenyewe. Opereta ni mchakato maalum katika nguzo ya Kubernetes ambayo inafanya kazi kulingana na "mzunguko wa kudhibiti" Kwa usaidizi wa opereta, mtumiaji anaweza kubadilisha usimamizi wa CRD otomatiki (ufafanuzi wa rasilimali maalum) kwa kubadilishana maelezo na API ya Kubernetes.

Kuna zana kadhaa katika jumuiya zinazorahisisha wasanidi programu kuunda waendeshaji wao wenyewe. Kati yao - Mfumo wa Opereta na Opereta SDK. SDK hii hutoa msingi ambao msanidi programu anaweza kuanza kuunda opereta haraka. Wacha tuseme unaweza kuanza kutoka kwa safu ya amri kitu kama hiki:

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

Hii inaunda msimbo wote wa boilerplate kwa opereta wako, ikijumuisha faili za YAML na msimbo wa 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

Basi unaweza kuongeza API na kidhibiti kinachohitajika, kama hii:

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

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

Kisha, mwishowe, kusanya opereta na utume kwa usajili wa chombo chako:

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

Ikiwa msanidi anataka udhibiti zaidi, msimbo wa boilerplate katika faili za Go unaweza kubadilishwa. Kwa mfano, ili kurekebisha maalum ya mtawala, unaweza kufanya mabadiliko kwenye faili controller.go.

Mradi mwingine kila mahali, hukuruhusu kuunda taarifa kwa kutumia faili za YAML tangazo pekee. Kwa mfano, mwendeshaji wa Apache Kafka atafafanuliwa takriban hivyo. Kwa hiyo, unaweza kusakinisha nguzo ya Kafka juu ya Kubernetes na amri chache tu:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

Na kisha usanidi na amri nyingine:

$ 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

Ubunifu

Katika miaka michache iliyopita, matoleo makuu ya Kubernetes yamekuwa yakitoka kila baada ya miezi michache - yaani, matoleo makuu matatu hadi manne kwa mwaka. Idadi ya vipengele vipya vilivyoletwa katika kila mmoja wao haipunguzi. Aidha, hakuna dalili za kupunguza kasi hata katika nyakati hizi ngumu - angalia hali ilivyo sasa Shughuli ya mradi wa Kubernetes kwenye Github.

Uwezo mpya hukuruhusu kuweka shughuli za nguzo kwa urahisi zaidi katika mizigo mbalimbali ya kazi. Kwa kuongeza, watengenezaji programu wanafurahia udhibiti mkubwa wakati wa kupeleka programu moja kwa moja kwenye uzalishaji.

Jumuiya ya

Kipengele kingine kikuu cha umaarufu wa Kubernetes ni nguvu ya jamii yake. Mnamo 2015, ilipofikia toleo la 1.0, Kubernetes ilifadhiliwa na Cloud Native Computing Foundation.

Pia kuna jamii mbalimbali SIG (Vikundi Maalum vya Wavuti) vililenga kufanya kazi katika maeneo tofauti ya Kubernetes kadri mradi unavyoendelea. Vikundi hivi vinaongeza vipengele vipya kila mara, hivyo kufanya kufanya kazi na Kubernetes kuwa rahisi na rahisi zaidi.

Cloud Native Foundation pia huandaa CloudNativeCon/KubeCon, ambayo, wakati wa kuandika, ndiyo mkutano mkubwa zaidi wa programu huria duniani. Kwa kawaida hufanyika mara tatu kwa mwaka, huleta pamoja maelfu ya wataalamu wanaotaka kuboresha Kubernetes na mfumo wake wa ikolojia, na pia kujifunza vipengele vipya vinavyoonekana kila baada ya miezi mitatu.

Aidha, Cloud Native Foundation ina Kamati ya Usimamizi wa Kiufundi, ambayo, pamoja na SIGs, hukagua mpya na zilizopo miradi fedha zinazolenga mfumo ikolojia wa mawingu. Mengi ya miradi hii husaidia kuboresha uwezo wa Kubernetes.

Hatimaye, ninaamini kwamba Kubernetes haingefanikiwa kama ilivyo bila juhudi za makusudi za jumuiya nzima, ambapo watu hushikamana lakini wakati huo huo wanakaribisha wageni kwenye kundi.

Wakati ujao

Mojawapo ya changamoto kuu ambazo watengenezaji watalazimika kukabiliana nazo katika siku zijazo ni uwezo wa kuzingatia maelezo ya kanuni yenyewe, na si kwa miundombinu ambayo inaendesha. Inakidhi mienendo hii dhana ya usanifu isiyo na seva, ambayo ni moja ya viongozi leo. Mifumo ya hali ya juu tayari ipo, k.m. mjuzi и OpenFaas, ambayo hutumia Kubernetes kuchukua muundo msingi kutoka kwa msanidi.

Katika makala haya, tumekuna tu uso wa hali ya sasa ya Kubernetes—kwa hakika, ni ncha tu ya kilima cha barafu. Watumiaji wa Kubernetes wana rasilimali nyingine nyingi, uwezo, na usanidi walio nao.

Chanzo: mapenzi.com

Kuongeza maoni