Tungkol sa lumalaking katanyagan ng Kubernetes

Hoy Habr!

Sa pagtatapos ng tag-araw, nais naming ipaalala sa iyo na patuloy kaming nagtatrabaho sa paksa Kubernetes at nagpasya na mag-publish ng isang artikulo mula sa Stackoverflow na nagpapakita ng estado ng mga gawain sa proyektong ito sa simula ng Hunyo.

Tungkol sa lumalaking katanyagan ng Kubernetes

Tangkilikin ang pagbabasa!

Sa panahon ng pagsulat ng artikulong ito, ang edad ng Kubernetes ay humigit-kumulang. anim na taong gulang, at sa nakalipas na dalawang taon ang katanyagan nito ay lumago nang husto na ito ay patuloy na niraranggo sa pinakapaborito mga platform. Pangatlo ang Kubernetes ngayong taon. Upang recap: Ang Kubernetes ay isang platform na idinisenyo para sa pagpapatakbo at pag-orkestra ng mga containerized na workload.

Nagsimula ang mga lalagyan bilang isang espesyal na disenyo para sa paghihiwalay ng mga proseso sa Linux; isinama ang mga lalagyan mula noong 2007 mga pangkat, at mula noong 2002 – mga namespace. Mas mahusay na idinisenyo ang mga lalagyan noong 2008, nang maging available ito LXC, at bumuo ang Google ng sarili nitong panloob na mekanismo ng korporasyon na tinatawag na Borg, kung saan "ginagawa ang lahat ng trabaho sa mga lalagyan." Mula rito, nag-fast forward kami hanggang 2013, nang maganap ang unang paglabas ng Docker, at sa wakas ay naging sikat na solusyon sa masa ang mga container. Sa oras na iyon, ang pangunahing tool para sa orkestrasyon ng lalagyan ay Mesos, kahit na hindi siya sikat. Unang inilabas ang Kubernetes noong 2015, pagkatapos nito ay naging de facto na pamantayan ang tool na ito sa larangan ng container orchestration.

Upang subukang maunawaan kung bakit sikat na sikat ang Kubernetes, subukan nating sagutin ang ilang tanong. Kailan ang huling pagkakataon na napagkasunduan ng mga developer kung paano mag-deploy ng mga application sa produksyon? Ilang developer ang kilala mo na gumagamit ng mga tool habang ang mga ito ay ibinigay sa labas ng kahon? Ilang cloud administrator ang mayroon ngayon na hindi nakakaintindi kung paano gumagana ang mga application? Titingnan natin ang mga sagot sa mga tanong na ito sa artikulong ito.

Imprastraktura bilang YAML

Sa mundong nagmula sa Puppet at Chef hanggang sa Kubernetes, isa sa pinakamalaking pagbabago ay ang paglipat mula sa "imprastraktura bilang code" patungo sa "imprastraktura bilang data"β€”partikular, tulad ng YAML. Ang lahat ng mapagkukunan sa Kubernetes, na kinabibilangan ng mga pod, configuration, deployed instance, volume, atbp., ay madaling mailarawan sa isang YAML file. Halimbawa:

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

Pinapadali ng view na ito para sa mga propesyonal sa DevOps o SRE na ganap na ipahayag ang kanilang mga workload nang hindi kinakailangang magsulat ng code sa mga wika tulad ng Python o Javascript.

Ang iba pang mga pakinabang ng pag-aayos ng imprastraktura bilang data ay kinabibilangan ng:

  • Kontrol sa Bersyon ng GitOps o Git Operations. Binibigyang-daan ka ng diskarteng ito na panatilihin ang lahat ng Kubernetes YAML file sa mga git repository, para masubaybayan mo nang eksakto kung kailan ginawa ang isang pagbabago, sino ang gumawa nito, at kung ano ang eksaktong nagbago. Pinapataas nito ang transparency ng mga operasyon sa buong organisasyon at pinapabuti ang kahusayan sa pagpapatakbo sa pamamagitan ng pag-aalis ng kalabuan, lalo na kung saan dapat hanapin ng mga empleyado ang mga mapagkukunang kailangan nila. Kasabay nito, nagiging mas madali ang awtomatikong gumawa ng mga pagbabago sa mga mapagkukunan ng Kubernetes sa pamamagitan lamang ng pagsasama ng isang pull request.
  • Scalability. Kapag ang mga mapagkukunan ay tinukoy bilang YAML, nagiging napakadali para sa mga operator ng cluster na baguhin ang isa o dalawang numero sa isang mapagkukunan ng Kubernetes, at sa gayon ay nagbabago kung paano ito nasusukat. Nagbibigay ang Kubernetes ng mekanismo para sa pahalang na autoscaling ng mga pod, na maaaring magamit upang maginhawang matukoy kung ano ang minimum at maximum na bilang ng mga pod na kinakailangan sa isang partikular na configuration ng deployment upang mahawakan ang mababa at mataas na antas ng trapiko. Halimbawa, kung nag-deploy ka ng configuration na nangangailangan ng karagdagang kapasidad dahil sa biglaang pagtaas ng trapiko, maaaring baguhin ang maxReplicas mula 10 hanggang 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

  • Seguridad at pamamahala. Ang YAML ay mahusay para sa pagsusuri kung paano na-deploy ang mga bagay sa Kubernetes. Halimbawa, ang isang pangunahing alalahanin sa seguridad ay nag-aalala kung ang iyong mga workload ay tumatakbo bilang isang hindi admin na user. Sa kasong ito, maaaring kailangan namin ng mga tool tulad ng paligsahan, YAML/JSON validator, plus Buksan ang Ahente ng Patakaran, isang validator ng patakaran upang matiyak na ang konteksto Konteksto ng Seguridad hindi pinapayagan ng iyong mga workload ang container na tumakbo nang may mga pribilehiyo ng administrator. Kung kinakailangan ito, maaaring maglapat ang mga user ng simpleng patakaran nagdadasal ako, ganito:

package main

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

  • Mga opsyon para sa pagsasama sa isang cloud provider. Isa sa mga pinakakilalang uso sa mataas na teknolohiya ngayon ay ang pagpapatakbo ng mga workload sa mga pampublikong tagapagbigay ng cloud. Gamit ang sangkap tagapagbigay ng ulap Pinapayagan ng Kubernetes ang anumang cluster na isama sa cloud provider kung saan ito tumatakbo. Halimbawa, kung ang isang user ay nagpapatakbo ng isang application sa Kubernetes sa AWS at gustong ilantad ang application na iyon sa pamamagitan ng isang serbisyo, ang cloud provider ay tumutulong sa awtomatikong paggawa ng serbisyo. LoadBalancerna awtomatikong magbibigay ng load balancer Amazon Elastic Load Balancerupang i-redirect ang trapiko sa mga pod ng application.

Pagpapalawak

Napakalawak ng Kubernetes at gusto ito ng mga developer. Mayroong isang hanay ng mga magagamit na mapagkukunan tulad ng mga pod, deployment, StatefulSets, mga sikreto, ConfigMaps, atbp. Totoo, ang mga user at developer ay maaaring magdagdag ng iba pang mga mapagkukunan sa form pasadyang mga kahulugan ng mapagkukunan.

Halimbawa, kung gusto nating tukuyin ang isang mapagkukunan CronTab, pagkatapos ay maaari kang gumawa ng ganito:

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

Sa ibang pagkakataon maaari tayong lumikha ng isang mapagkukunan ng CronTab na tulad nito:

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

Ang isa pang opsyon para sa pagpapalawak sa Kubernetes ay ang developer ay maaaring magsulat ng sarili niyang mga pahayag. Opereytor ay isang espesyal na proseso sa cluster ng Kubernetes na gumagana ayon sa β€œcontrol circuit" Sa tulong ng isang operator, maaaring i-automate ng user ang pamamahala ng mga CRD (custom resource definitions) sa pamamagitan ng pagpapalitan ng impormasyon sa Kubernetes API.

Mayroong ilang mga tool sa komunidad na nagpapadali para sa mga developer na lumikha ng kanilang sariling mga operator. Sa kanila - Framework ng Operator at Operator SDK. Ang SDK na ito ay nagbibigay ng pundasyon kung saan ang isang developer ay maaaring mabilis na magsimulang gumawa ng isang operator. Sabihin nating maaari kang magsimula sa command line na tulad nito:

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

Ginagawa nito ang lahat ng boilerplate code para sa iyong operator, kabilang ang mga YAML file at Golang code:

.
|____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

Pagkatapos ay maaari mong idagdag ang mga kinakailangang API at controller, tulad nito:

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

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

Pagkatapos, sa wakas, tipunin ang operator at ipadala ito sa registry ng iyong container:

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

Kung gusto ng developer ng higit pang kontrol, maaaring baguhin ang boilerplate code sa mga Go file. Halimbawa, upang baguhin ang mga detalye ng controller, maaari kang gumawa ng mga pagbabago sa file controller.go.

Isa pang proyekto EVERYWHERE, ay nagbibigay-daan sa iyong lumikha ng mga pahayag gamit lamang ang mga deklaratibong YAML file. Halimbawa, ang isang operator para sa Apache Kafka ay tutukuyin nang humigit-kumulang kaya. Gamit ito, maaari kang mag-install ng isang Kafka cluster sa ibabaw ng Kubernetes gamit lamang ang ilang command:

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

At pagkatapos ay i-configure ito gamit ang isa pang command:

$ 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

Mga makabagong-likha

Sa nakalipas na ilang taon, lumalabas ang mga pangunahing pagpapalabas ng Kubernetes bawat ilang buwan - ibig sabihin, tatlo hanggang apat na pangunahing pagpapalabas bawat taon. Ang bilang ng mga bagong feature na ipinakilala sa bawat isa sa kanila ay hindi bumababa. Bukod dito, walang mga palatandaan ng pagbagal kahit na sa mahihirap na oras na ito - tingnan kung ano ang sitwasyon ngayon Aktibidad ng proyekto ng Kubernetes sa Github.

Nagbibigay-daan sa iyo ang mga bagong kakayahan na mas flexible ang cluster operations sa iba't ibang workload. Bilang karagdagan, ang mga programmer ay nasisiyahan sa higit na kontrol kapag direktang nagde-deploy ng mga application sa produksyon.

Komunidad

Ang isa pang pangunahing aspeto ng katanyagan ng Kubernetes ay ang lakas ng komunidad nito. Noong 2015, nang maabot ang bersyon 1.0, ang Kubernetes ay na-sponsor ng Cloud Native Computing Foundation.

Mayroon ding iba't ibang komunidad SIG (Mga Espesyal na Grupo ng Interes) na nakatuon sa pagtatrabaho sa iba't ibang lugar ng Kubernetes habang umuunlad ang proyekto. Ang mga pangkat na ito ay patuloy na nagdaragdag ng mga bagong feature, na ginagawang mas maginhawa at maginhawa ang pagtatrabaho sa Kubernetes.

Nagho-host din ang Cloud Native Foundation ng CloudNativeCon/KubeCon, na, sa oras ng pagsulat, ay ang pinakamalaking open source conference sa mundo. Karaniwang gaganapin nang tatlong beses sa isang taon, pinagsasama-sama nito ang libu-libong mga propesyonal na gustong pahusayin ang Kubernetes at ang ecosystem nito, pati na rin matuto ng mga bagong feature na lumalabas tuwing tatlong buwan.

Bukod dito, mayroon ang Cloud Native Foundation Komite sa Teknikal na Pangangasiwa, na, kasama ang mga SIG, ay nagsusuri ng bago at umiiral na Proyekto mga pondong nakatuon sa cloud ecosystem. Karamihan sa mga proyektong ito ay nakakatulong na mapabuti ang mga lakas ng Kubernetes.

Sa wakas, naniniwala ako na hindi magiging matagumpay ang Kubernetes kung wala ang mga pagsisikap ng buong komunidad, kung saan magkakasama ang mga tao ngunit sa parehong oras ay tinatanggap ang mga bagong dating sa grupo.

Ang hinaharap

Isa sa mga pangunahing hamon na haharapin ng mga developer sa hinaharap ay ang kakayahang tumuon sa mga detalye ng mismong code, at hindi sa imprastraktura kung saan ito tumatakbo. Natutugunan nito ang mga usong ito walang server na paradigma ng arkitektura, na isa sa nangunguna ngayon. Mayroon nang mga advanced na framework, hal. kabatiran ΠΈ OpenFaas, na gumagamit ng Kubernetes para i-abstract ang imprastraktura mula sa developer.

Sa artikulong ito, sinira lang namin ang ibabaw ng kasalukuyang estado ng Kubernetesβ€”sa katunayan, ito ay dulo lamang ng malaking bato ng yelo. Ang mga gumagamit ng Kubernetes ay may maraming iba pang mga mapagkukunan, kakayahan, at mga pagsasaayos na kanilang magagamit.

Pinagmulan: www.habr.com

Magdagdag ng komento