Cov neeg khiav dej num rau Kubernetes: yuav ua li cas khiav cov ntawv thov muaj cai

Qhov teeb meem nrog cov ntawv thov tseem ceeb hauv Kubernetes

Configuration, launching thiab ntxiv scaling ntawm daim ntaub ntawv thiab cov kev pab cuam yog ib qho yooj yim thaum nws los txog rau cov ntaub ntawv uas cais raws li stateless, i.e. tsis txuag cov ntaub ntawv. Nws yog qhov yooj yim los khiav cov kev pabcuam hauv Kubernetes, siv nws tus qauv APIs, vim tias txhua yam tshwm sim "tawm ntawm lub thawv": raws li tus qauv kev teeb tsa, tsis muaj qhov tshwj xeeb lossis khawv koob.

Cias muab tso, kom tshaj tawm tsib daim ntawv luam ntxiv ntawm qhov backend hauv PHP / Ruby / Python hauv ib pawg ntawm cov thawv, koj tsuas yog yuav tsum teeb tsa lub server tshiab 5 zaug thiab luam cov peev txheej. Txij li thaum ob qho tib si lub hauv paus chaws thiab cov ntawv init yog nyob rau hauv daim duab, scaling ib daim ntawv thov tsis muaj lub xeev ua tiav theem pib. Raws li cov kiv cua ntawm ntim thiab microservice architecture paub zoo, qhov nyuaj pib nrog hais txog apps, i.e. nrog cov ntaub ntawv persistence xws li databases thiab caches (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra ...). Qhov no siv rau ob qho tib si software uas nws tus kheej siv cov pawg pawg (piv txwv li, Percona XtraDB thiab Cassandra), thiab software uas yuav tsum muaj kev tswj hwm kev tswj hwm (xws li Redis, MySQL, PostgreSQL ...).

Teeb meem tshwm sim vim hais tias qhov chaws code thiab launching cov kev pab cuam tsis txaus - koj yuav tsum tau ua ib co kauj ruam ntxiv. Yam tsawg kawg, luam cov ntaub ntawv thiab / lossis koom nrog pawg. Ntau qhov tseeb, cov kev pabcuam no xav tau kev nkag siab txog yuav ua li cas kom ntsuas tau zoo, hloov kho thiab rov kho lawv yam tsis muaj cov ntaub ntawv poob lossis tsis muaj nyob ib ntus. Muab cov kev xav tau no rau hauv tus account yog hu ua "kev paub txog kev ua haujlwm".

CoreOS Operators

Txhawm rau txhawm rau "kev pab cuam" kev paub txog kev ua haujlwm, xyoo tas los CoreOS project tswvcuab "chav kawm tshiab ntawm software" rau Kubernetes platform - Cov neeg ua haujlwm (los ntawm Askiv "kev ua haujlwm", piv txwv li "kev ua haujlwm").

Cov neeg ua haujlwm siv thiab txuas ntxiv cov peev txheej tseem ceeb ntawm Kubernetes (incl. StatefulSets, saib qhov sib txawv hauv qab no) tso cai rau DevOps cov kws tshaj lij ntxiv kev paub txog kev ua haujlwm rau daim ntawv thov code.

Tus neeg ua haujlwm lub hom phiaj - muab tus neeg siv nrog API uas tso cai rau koj tswj hwm ntau lub xeev daim ntawv thov nyob rau hauv Kubernetes pawg, yam tsis xav txog dab tsi nyob hauv qab hood (cov ntaub ntawv dab tsi thiab yuav ua li cas nrog nws, cov lus txib dab tsi tseem yuav tsum tau ua kom tswj tau pawg ). Qhov tseeb, tus neeg teb xov tooj yog tsim los ua kom yooj yim rau kev ua hauj lwm nrog daim ntawv thov nyob rau hauv pawg ntau npaum li sai tau, automating kev ua hauj lwm cov hauj lwm uas yav tas los yuav tsum tau daws manually.

Cov neeg ua haujlwm ua haujlwm li cas

ReplicaSets Kubernetes tso cai rau koj los qhia cov naj npawb xav tau ntawm cov pods khiav, thiab cov tswj xyuas kom ntseeg tau tias lawv tus lej raug khaws cia (los ntawm kev tsim thiab tshem tawm cov pods). Tus neeg teb xov tooj ua haujlwm zoo ib yam, ntxiv cov txheej txheem kev paub txog kev ua haujlwm rau tus qauv Kubernetes cov peev txheej thiab tus tswj hwm uas tso cai rau koj ua cov haujlwm ntxiv los txhawb nqa cov ntawv thov uas xav tau.

Qhov no txawv li cas StatefulSets, tsim los rau cov ntawv thov uas xav tau cov pawg los muab lawv nrog cov peev txheej tseem ceeb xws li cov ntaub ntawv khaws cia lossis IP zoo li qub? Rau cov ntawv thov no, Cov Neeg Siv Khoom tuaj yeem siv StatefulSets (hloov ReplicaSets) raws li lub hauv paus, muab ntxiv automation: ua qhov tsim nyog ua thaum muaj kev sib tsoo, ua thaub qab, hloov kho qhov teeb tsa, thiab lwm yam.

Thiab yog li ntawd, tag nrho cov no ua haujlwm li cas? Tus neeg teb xov tooj yog tus thawj tswj daemon uas:

  1. subscribes rau qhov kev tshwm sim API hauv Kubernetes;
  2. tau txais los ntawm nws cov ntaub ntawv hais txog qhov system (txog nws ReplicaSets, pods, cov kev pab cuam thiab lwm yam.);
  3. tau txais cov ntaub ntawv hais txog Third Party Resources (saib cov piv txwv hauv qab no);
  4. reacts rau tsos / hloov Third Party Resources (piv txwv li, hloov qhov loj, hloov lub version, thiab lwm yam);
  5. reacts rau cov kev hloov nyob rau hauv lub xeev ntawm lub system (txog nws ReplicaSets, pods, cov kev pab cuam thiab lwm yam.);
  6. qhov tseem ceeb tshaj plaws:
    1. hu rau Kubernetes API los tsim txhua yam nws xav tau (dua, nws tus kheej ReplicaSets, pods, cov kev pab cuam...),
    2. ua qee yam khawv koob (kom ua kom yooj yim, koj tuaj yeem xav tias Tus Neeg Ua Haujlwm nkag mus rau hauv cov pods lawv tus kheej thiab hu cov lus txib, piv txwv li, koom nrog pawg lossis hloov kho cov ntaub ntawv thaum hloov kho version).

Cov neeg khiav dej num rau Kubernetes: yuav ua li cas khiav cov ntawv thov muaj cai
Qhov tseeb, raws li tau pom los ntawm daim duab, ib daim ntawv thov cais tsuas yog ntxiv rau Kubernetes (ib txwm txiag с ReplicaSet), uas yog hu ua Operator. Nws nyob hauv ib lub pod zoo tib yam (feem ntau tsuas yog ib qho) thiab, raws li txoj cai, tsuas yog lub luag haujlwm rau nws namespace. Daim ntawv thov tus neeg teb xov tooj no siv nws API - txawm tias tsis ncaj qha, tab sis dhau los Third Party Resources hauv Kubernetes.

Yog li, tom qab peb tau tsim nyob rau hauv namespace Tus neeg teb xov tooj, peb tuaj yeem ntxiv rau nws Third Party Resources.

Piv txwv li (saib hauv qab no kom paub meej):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Piv txwv rau Elasticsearch:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Cov kev xav tau rau cov neeg ua haujlwm

CoreOS tsim cov qauv tseem ceeb uas tau txais los ntawm engineers thaum ua haujlwm ntawm Cov Neeg Ua Haujlwm. Txawm hais tias txhua tus neeg ua haujlwm yog tus kheej (tsim rau ib daim ntawv thov tshwj xeeb nrog nws tus kheej cov yam ntxwv thiab cov kev xav tau), lawv cov kev tsim yuav tsum yog raws li hom kev ua haujlwm uas ua raws li cov cai hauv qab no:

  1. Kev teeb tsa yuav tsum tau ua los ntawm ib qho txiag: kubectl tsim -f SOME_OPERATOR_URL/deployment.yaml - thiab tsis tas yuav tsum tau ua ntxiv.
  2. Thaum txhim kho tus neeg teb xov tooj hauv Kubernetes, yuav tsum tau tsim hom thib peb tshiab (ThirdPartyResource). Txhawm rau tso cov ntawv thov (piv txwv li pawg) thiab tswj lawv ntxiv (hloov kho tshiab, hloov pauv, thiab lwm yam), tus neeg siv yuav siv hom no.
  3. Thaum twg los tau, koj yuav tsum siv cov primitives ua rau Kubernetes, xws li cov kev pab cuam ΠΈ ReplicaSetssiv tau zoo-kuaj thiab nkag siab code.
  4. Yuav tsum tau rov qab sib raug zoo ntawm Cov Neeg Ua Haujlwm thiab kev txhawb nqa rau cov ntawv qub ntawm cov neeg siv tsim cov peev txheej.
  5. Yog tias tus neeg teb xov tooj raug tshem tawm, daim ntawv thov nws tus kheej yuav tsum txuas ntxiv ua haujlwm yam tsis muaj kev hloov pauv.
  6. Cov neeg siv yuav tsum muaj peev xwm txheeb xyuas qhov xav tau daim ntawv thov version thiab orchestrate daim ntawv thov version hloov tshiab. Tsis muaj kev hloov kho software yog ib qho teeb meem ntawm kev ua haujlwm thiab kev ruaj ntseg, yog li Cov Neeg Siv Khoom yuav tsum pab cov neeg siv hauv qhov teeb meem no.
  7. Cov neeg ua haujlwm yuav tsum tau sim nrog lub cuab yeej xws li Chaos Monkey, uas txheeb xyuas qhov ua tsis tiav hauv cov pods, teeb tsa, thiab lub network.

lwm Operator

Tus neeg ua haujlwm kev ua piv txwv - lwm yam Operator, npaj nyob rau hnub tshaj tawm ntawm lub tswv yim no. etcd pawg teeb tsa tuaj yeem ua haujlwm nyuaj vim qhov xav tau los tswj pawg pawg, qhov xav tau rov txhim kho pawg tswv cuab, tsim kev thaub qab, thiab lwm yam. Piv txwv li, manually scaling ib etcd pawg txhais tau hais tias koj yuav tsum tau tsim ib lub npe DNS rau ib tug tshiab pawg neeg, pib ib tug tshiab etcd chaw, thiab ceeb toom rau pawg txog cov tswv cuab tshiab (etcdctl tus tswv cuab ntxiv). Nyob rau hauv rooj plaub ntawm tus neeg teb xov tooj, tus neeg siv tsuas yog yuav tsum tau hloov cov pawg loj - txhua yam yuav tshwm sim tau.

Thiab txij li lwm yam kuj tau tsim nyob rau hauv CoreOS, nws yog qhov tsim nyog kom pom nws tus neeg teb xov tooj tshwm sim thawj zaug. Nws ua haujlwm li cas? Operator logic thiab lwm yam yog txiav txim los ntawm peb yam:

  1. Saib xyuas. Tus neeg teb xov tooj saib xyuas lub xeev ntawm pawg siv Kubernetes API.
  2. Kev tsom xam. Pom qhov sib txawv ntawm cov xwm txheej tam sim no thiab qhov xav tau (txhais los ntawm tus neeg siv teeb tsa).
  3. Kev ua. Kev daws teeb meem pom qhov sib txawv siv lwm yam thiab / lossis Kubernetes cov kev pabcuam APIs.

Cov neeg khiav dej num rau Kubernetes: yuav ua li cas khiav cov ntawv thov muaj cai

Txhawm rau siv qhov laj thawj no, cov haujlwm tau npaj rau hauv Tus Neeg Siv Khoom Tsim/Destroy (tsim thiab tshem tawm etcd pawg tswv cuab) thiab Resize (hloov tus naj npawb ntawm pawg neeg). Qhov tseeb ntawm nws txoj haujlwm tau raug tshuaj xyuas siv cov khoom siv hluav taws xob tsim hauv qhov zoo li Chaos Monkey los ntawm Netflix, i.e. tua etcd pods randomly.

Rau kev ua haujlwm tag nrho ntawm lwm yam, Tus Neeg Ua Haujlwm muab cov yam ntxwv ntxiv: thaub qab (tsis siv neeg thiab pom tsis tau rau cov neeg siv tsim cov ntawv luam theej tawm - hauv kev teeb tsa nws txaus los txiav txim siab ntau npaum li cas yuav ua rau lawv thiab ntau npaum li cas khaws cia - thiab rov qab kho cov ntaub ntawv tom qab los ntawm lawv) thiab txawj tej yam ntxiv (hloov kho lwm yam kev teeb tsa yam tsis muaj sijhawm poob).

Ua haujlwm nrog tus neeg ua haujlwm zoo li cas?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

Cov xwm txheej tam sim no ntawm lwm tus neeg teb xov tooj yog beta version, xav kom Kubernetes 1.5.3+ thiab lwm yam 3.0+ khiav. Qhov chaws thiab cov ntaub ntawv (nrog rau cov lus qhia rau kev siv) muaj nyob ntawm GitHub.

Lwm qhov piv txwv siv los ntawm CoreOS tau tsim - Prometheus Operator, tab sis nws tseem nyob hauv alpha version (tsis yog txhua qhov kev npaj tau ua tiav).

Cov xwm txheej thiab kev cia siab

5 lub hlis dhau los txij li kev tshaj tawm ntawm Kubernetes Cov Neeg Ua Haujlwm. Tseem muaj ob qhov kev siv tsuas yog muaj nyob rau hauv cov ntaub ntawv CoreOS repository (rau lwm yam thiab Prometheus). Ob leeg tseem tsis tau mus txog lawv qhov ruaj khov versions, tab sis kev cog lus tau pom nyob rau txhua hnub.

Cov neeg tsim tawm xav txog "lub neej yav tom ntej uas cov neeg siv nruab Postgres Operators, Cassandra Operators lossis Redis Operators ntawm lawv cov Kubernetes pawg thiab ua haujlwm nrog cov chaw ua haujlwm loj ntawm cov ntawv thov no yooj yim raws li kev siv cov ntawv luam ntawm lub vev xaib tsis muaj neeg nyob niaj hnub no." Ua ntej Cov neeg ua haujlwm los ntawm cov neeg sab nrauv tsim tawm tiag tiag pib tshwm:

  • Elasticsearch Operator los ntawm UPMC Enterprises;
  • PostgreSQL Operator los ntawm Crunchy Cov ntaub ntawv (tshaj tawm lig Lub Peb Hlis 2017);
  • Rook Operator los ntawm cov kws sau ntawv ntawm kev faib cov ntaub ntawv khaws cia raws li Ceph (Rook yog nyob rau hauv alpha xwm txheej);
  • Openstack Operators los ntawm SAP CCloud.

Ntawm lub rooj sib tham loj tshaj plaws nyob sab Europe dawb software FOSDEM, uas tau tshwm sim thaum Lub Ob Hlis 2017 hauv Brussels, Josh Wood los ntawm CoreOS tshaj tawm Cov Neeg Ua Haujlwm hauv qhia (ib daim vis dis aus muaj nyob ntawm qhov txuas!), uas yuav tsum ua rau muaj kev loj hlob ntawm kev muaj koob meej ntawm lub tswv yim no hauv cov zej zog qhib qhov dav.

PS Ua tsaug rau koj qhov kev txaus siab ntawm tsab xov xwm! Subscribe rau peb hub, yog li tsis txhob nco cov ntaub ntawv tshiab thiab zaub mov txawv ntawm DevOps thiab GNU / Linux kev tswj hwm - peb yuav tshaj tawm lawv tsis tu ncua!

Tau qhov twg los: www.hab.com

Ntxiv ib saib