Awọn oniṣẹ fun Kubernetes: bii o ṣe le ṣiṣẹ awọn ohun elo ipinlẹ

Iṣoro naa pẹlu awọn ohun elo ipinlẹ ni Kubernetes

Iṣeto ni, ifilọlẹ ati igbelosoke siwaju ti awọn ohun elo ati awọn iṣẹ rọrun nigbati o ba de si awọn ọran ti a pin si bi alaini orilẹ-ede, ie. lai fifipamọ awọn data. O rọrun lati ṣiṣẹ iru awọn iṣẹ ni Kubernetes, ni lilo awọn API boṣewa rẹ, nitori ohun gbogbo n ṣẹlẹ “lati inu apoti”: ni ibamu si awọn atunto boṣewa, laisi pẹlu eyikeyi pato tabi idan.

Ni irọrun, lati ṣe ifilọlẹ awọn ẹda marun diẹ sii ti ẹhin ni PHP/ Ruby/Python ninu iṣupọ awọn apoti, o nilo nikan lati ṣeto olupin tuntun ni awọn akoko 5 ati daakọ awọn orisun. Niwọn igba ti koodu orisun mejeeji ati iwe afọwọkọ init wa ninu aworan, iwọn ohun elo ti ko ni ipinlẹ di alakọbẹrẹ patapata. Gẹgẹbi awọn onijakidijagan ti awọn apoti ati faaji microservice mọ daradara, iṣoro naa bẹrẹ pẹlu ipinle apps, i.e. pẹlu itẹramọṣẹ data gẹgẹbi awọn apoti isura infomesonu ati awọn caches (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Eyi kan si sọfitiwia mejeeji ti o ṣe imuse iṣupọ pipọ (fun apẹẹrẹ, Percona XtraDB ati Cassandra), ati sọfitiwia ti o nilo awọn ohun elo iṣakoso lọtọ (bii Redis, MySQL, PostgreSQL…).

Awọn iṣoro dide nitori koodu orisun ati ifilọlẹ iṣẹ naa ko to mọ - o nilo lati ṣe awọn igbesẹ diẹ sii. Ni o kere ju, daakọ data naa ati/tabi darapọ mọ iṣupọ naa. Ni deede diẹ sii, awọn iṣẹ wọnyi nilo oye ti bii o ṣe le ṣe iwọn daradara, ṣe imudojuiwọn ati tunto wọn laisi pipadanu data tabi wiwa fun igba diẹ. Gbigba awọn iwulo wọnyi sinu akọọlẹ ni a pe ni “imọ iṣẹ-ṣiṣe”.

Awọn oniṣẹ CoreOS

Lati le “eto” imọ iṣiṣẹ, pẹ ni ọdun to kọja iṣẹ akanṣe CoreOS ṣafihan “kilasi sọfitiwia tuntun kan” fun pẹpẹ Kubernetes - Awọn oniṣẹ (lati “iṣiṣẹ” Gẹẹsi, ie “iṣiṣẹ”).

Awọn oniṣẹ nipa lilo ati faagun awọn agbara pataki ti Kubernetes (pẹlu. StatefulSets, wo iyatọ ni isalẹ) gba awọn alamọja DevOps lati ṣafikun imọ iṣẹ si koodu ohun elo.

Ero Onišẹ - pese olumulo pẹlu API ti o fun ọ laaye lati ṣakoso ọpọlọpọ awọn ohun elo ohun elo ipinlẹ ni iṣupọ Kubernetes, laisi ironu nipa kini o wa labẹ hood (kini data ati kini lati ṣe pẹlu rẹ, awọn aṣẹ wo ni o tun nilo lati ṣiṣẹ lati ṣetọju iṣupọ naa ). Ni otitọ, a ṣe apẹrẹ oniṣẹ lati ṣe irọrun iṣẹ pẹlu ohun elo laarin iṣupọ bi o ti ṣee ṣe, adaṣe adaṣe ti awọn iṣẹ ṣiṣe ti o ni lati yanju pẹlu ọwọ.

Bawo ni Awọn oniṣẹ Ṣiṣẹ

ReplicaSets Kubernetes gba ọ laaye lati pato nọmba ti o fẹ ti awọn adarọ-ese ti nṣiṣẹ, ati awọn olutona rii daju pe nọmba wọn wa ni itọju (nipa ṣiṣẹda ati piparẹ awọn adarọ-ese). Oniṣẹ ṣiṣẹ ni ọna kanna, fifi eto imọ-iṣiṣẹ kun si orisun Kubernetes boṣewa ati oludari ti o fun ọ laaye lati ṣe awọn iṣe afikun lati ṣe atilẹyin nọmba ti awọn ohun elo ohun elo.

Bawo ni eyi ṣe yatọ si StatefulSets, Ti a ṣe apẹrẹ fun awọn ohun elo ti o nilo iṣupọ lati pese wọn pẹlu awọn ohun elo ipinle gẹgẹbi ibi ipamọ data tabi IPs aimi? Fun iru awọn ohun elo, Awọn oniṣẹ le lo StatefulSets (dipo ReplicaSets) bi ipilẹ, ẹbọ afikun adaṣiṣẹ: ṣe awọn iṣe pataki ni ọran ti awọn ipadanu, ṣe awọn afẹyinti, ṣe imudojuiwọn iṣeto ni, ati bẹbẹ lọ.

Ati bẹ, bawo ni gbogbo eyi ṣe n ṣiṣẹ? Oṣiṣẹ naa jẹ daemon oluṣakoso ti:

  1. ṣe alabapin si API iṣẹlẹ ni Kubernetes;
  2. gba data lati ọdọ rẹ nipa eto naa (nipa rẹ ReplicaSets, pods, awọn iṣẹ ati bẹbẹ lọ.);
  3. gba data nipa Kẹta Party Resources (wo apẹẹrẹ ni isalẹ);
  4. fesi si irisi / ayipada Kẹta Party Resources (fun apẹẹrẹ, lati yi iwọn pada, yi ẹya pada, ati bẹbẹ lọ);
  5. fesi si awọn ayipada ni ipo ti eto naa (nipa awọn oniwe- ReplicaSets, pods, awọn iṣẹ ati bẹbẹ lọ.);
  6. pataki julọ:
    1. Awọn ipe lori Kubernetes API lati ṣẹda ohun gbogbo ti o nilo (lẹẹkansi, tirẹ ReplicaSets, pods, awọn iṣẹ...),
    2. ṣe idan diẹ (lati jẹ ki o rọrun, o le ro pe oniṣẹ lọ sinu awọn adarọ-ese funrararẹ ati pe awọn aṣẹ, fun apẹẹrẹ, lati darapọ mọ iṣupọ kan tabi lati ṣe igbesoke ọna kika data nigba mimuuṣiṣẹpọ ẹya kan).

Awọn oniṣẹ fun Kubernetes: bii o ṣe le ṣiṣẹ awọn ohun elo ipinlẹ
Ni otitọ, bi a ti le rii lati aworan, ohun elo lọtọ ni a ṣafikun nirọrun si Kubernetes (deede imuṣiṣẹ с ReplicaSet), eyi ti a npe ni Oṣiṣẹ. O ngbe ni adarọ-ese lasan (nigbagbogbo ọkan) ati, gẹgẹbi ofin, jẹ iduro fun rẹ nikan Aye orukọ. Ohun elo oniṣẹ n ṣe imuse API rẹ - botilẹjẹpe kii ṣe taara, ṣugbọn nipasẹ Kẹta Party Resources ninu Kubernetes.

Nitorinaa, lẹhin ti a ti ṣẹda Aye orukọ Oniṣẹ, a le fi kun si Kẹta Party Resources.

Apẹẹrẹ fun etcd (wo isalẹ fun awọn alaye):

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

Apẹẹrẹ fun 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

Awọn ibeere fun awọn oniṣẹ

CoreOS ṣe agbekalẹ awọn ilana akọkọ ti o gba nipasẹ awọn onimọ-ẹrọ lakoko ti o n ṣiṣẹ lori Awọn oniṣẹ. Bi o ti jẹ pe gbogbo awọn oniṣẹ jẹ ẹni kọọkan (ti a ṣẹda fun ohun elo kan pato pẹlu awọn abuda ati awọn iwulo tirẹ), ẹda wọn gbọdọ da lori iru ilana ti o fa awọn ibeere wọnyi:

  1. Fifi sori gbọdọ wa ni ṣe nipasẹ kan nikan imuṣiṣẹ: kubectl ṣẹda -f SAME_OPERATOR_URL/deployment.yaml - ati pe ko nilo awọn iṣe afikun.
  2. Nigbati o ba nfi oniṣẹ sori ẹrọ ni Kubernetes, iru ẹni-kẹta tuntun gbọdọ ṣẹda (Olusun ẹni kẹta). Lati ṣe ifilọlẹ awọn iṣẹlẹ ohun elo (awọn apẹẹrẹ iṣupọ) ati ṣakoso wọn siwaju (awọn ẹya imudojuiwọn, iwọn, ati bẹbẹ lọ), olumulo yoo lo iru yii.
  3. Nigbakugba ti o ṣee ṣe, o yẹ ki o lo awọn alakoko ti a ṣe sinu Kubernetes, bii awọn iṣẹ и ReplicaSetslati lo koodu ti o ni idanwo daradara ati oye.
  4. Nilo ibamu sẹhin ti Awọn oniṣẹ ati atilẹyin fun awọn ẹya agbalagba ti awọn orisun ti olumulo ṣẹda.
  5. Ti o ba ti yọ oniṣẹ kuro, ohun elo funrararẹ yẹ ki o tẹsiwaju lati ṣiṣẹ laisi awọn ayipada.
  6. Awọn olumulo yẹ ki o ni anfani lati ṣalaye ẹya ohun elo ti o fẹ ati awọn imudojuiwọn ẹya ohun elo orchestrate. Aini awọn imudojuiwọn sọfitiwia jẹ orisun ti o wọpọ ti iṣẹ ṣiṣe ati awọn iṣoro aabo, nitorinaa Awọn oniṣẹ gbọdọ ṣe iranlọwọ fun awọn olumulo ninu ọran yii.
  7. Awọn oniṣẹ yẹ ki o ni idanwo pẹlu ọpa bii Chaos Monkey, eyiti o ṣe idanimọ awọn ikuna ti o pọju ninu awọn adarọ-ese, awọn atunto, ati nẹtiwọọki.

etcd onišẹ

Apeere imuse onišẹ - etcd oniṣẹ, pese sile ni ọjọ ti ikede ti ero yii. Iṣeto iṣupọ etcd le jẹ idiju nitori iwulo lati ṣetọju iyege, iwulo lati tunto ẹgbẹ iṣupọ, ṣẹda awọn afẹyinti, ati bẹbẹ lọ. Fun apẹẹrẹ, pẹlu ọwọ wiwọn iṣupọ etcd tumọ si pe o nilo lati ṣẹda orukọ DNS kan fun ọmọ ẹgbẹ iṣupọ tuntun kan, bẹrẹ nkan miiran ati bẹbẹ lọ, ki o ṣe itaniji iṣupọ nipa ọmọ ẹgbẹ tuntun (etcdctl egbe fi). Ninu ọran ti oniṣẹ, olumulo yoo nilo lati yi iwọn iṣupọ pada nikan - ohun gbogbo miiran yoo ṣẹlẹ laifọwọyi.

Ati pe niwọn igba ti a tun ṣẹda etcd ni CoreOS, o jẹ ọgbọn pupọ lati rii pe oniṣẹ rẹ han ni akọkọ. Báwo ló ṣe ń ṣiṣẹ́? Onišẹ kannaa etcd ti pinnu nipasẹ awọn ẹya mẹta:

  1. Ṣe akiyesi. Oniṣẹ ṣe abojuto ipo iṣupọ nipa lilo Kubernetes API.
  2. Onínọmbà. Wa awọn iyatọ laarin ipo lọwọlọwọ ati ọkan ti o fẹ (ti a ṣalaye nipasẹ iṣeto olumulo).
  3. Iṣe. Ṣe ipinnu awọn iyatọ ti a rii ni lilo ati bẹbẹ lọ ati/tabi awọn API iṣẹ Kubernetes.

Awọn oniṣẹ fun Kubernetes: bii o ṣe le ṣiṣẹ awọn ohun elo ipinlẹ

Lati ṣe ilana ọgbọn yii, awọn iṣẹ ti pese sile ni oniṣẹ Ṣẹda / run (ṣẹda ati piparẹ etcd awọn ọmọ ẹgbẹ iṣupọ) ati resize (iyipada ninu nọmba awọn ọmọ ẹgbẹ iṣupọ). Atunse ti isẹ rẹ ni a ṣayẹwo nipa lilo ohun elo ti a ṣẹda ni irisi Chaos Monkey lati Netflix, i.e. pipa etcd pods laileto.

Fun iṣẹ ni kikun ti etcd, oniṣẹ pese awọn ẹya afikun: afẹyinti (laifọwọyi ati alaihan si awọn ẹda olumulo ti awọn adakọ afẹyinti - ni atunto o to lati pinnu iye igba lati ṣe wọn ati iye melo lati fipamọ - ati imupadabọ data atẹle lati ọdọ wọn) ati igbesoke (imudojuiwọn ati be be lo awọn fifi sori ẹrọ lai downtime).

Kini n ṣiṣẹ pẹlu oniṣẹ ẹrọ kan dabi?

$ 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

Ipo lọwọlọwọ ti etcd Operator jẹ ẹya beta, to nilo Kubernetes 1.5.3+ ati etcd 3.0+ lati ṣiṣẹ. Koodu orisun ati iwe (pẹlu awọn ilana fun lilo) wa ni GitHub.

Apẹrẹ apẹẹrẹ miiran lati CoreOS ti ṣẹda - Prometheus onišẹ, ṣugbọn o tun wa ni ẹya alpha (kii ṣe gbogbo awọn ẹya ti a gbero ni a ti ṣe).

Ipo ati asesewa

Awọn oṣu 5 ti kọja lati ikede ti Awọn oniṣẹ Kubernetes. Awọn imuṣẹ meji nikan tun wa ni ibi ipamọ CoreOS osise (fun etcd ati Prometheus). Awọn mejeeji ko tii de awọn ẹya iduroṣinṣin wọn, ṣugbọn awọn iṣẹ ṣiṣe ni a ṣe akiyesi ni ipilẹ ojoojumọ.

Awọn olupilẹṣẹ n wo “ọjọ iwaju kan ninu eyiti awọn olumulo fi sori ẹrọ Awọn oniṣẹ Postgres, Awọn oniṣẹ Cassandra tabi Awọn oniṣẹ Redis lori awọn iṣupọ Kubernetes wọn ati ṣiṣẹ pẹlu awọn ohun elo iwọnwọn ti awọn ohun elo wọnyi ni irọrun bi gbigbe awọn ẹda ti awọn ohun elo wẹẹbu ti ko ni ipinlẹ jẹ loni.” Akoko Awọn oniṣẹ lati ẹni kẹta Difelopa gan bẹrẹ lati han:

Ni apejọ sọfitiwia ọfẹ ti Yuroopu ti o tobi julọ FOSDEM, eyiti o waye ni Kínní 2017 ni Brussels, Josh Wood lati CoreOS kede Awọn oniṣẹ ni ijabọ (fidio kan wa ni ọna asopọ!), Eyi ti o yẹ ki o ṣe alabapin si idagbasoke ti gbaye-gbale ti ero yii ni agbegbe Open Source.

PS O ṣeun fun rẹ anfani ni awọn article! Alabapin si ibudo wa, ki o má ba padanu awọn ohun elo titun ati awọn ilana lori DevOps ati GNU/Linux eto isakoso - a yoo gbejade wọn nigbagbogbo!

orisun: www.habr.com

Fi ọrọìwòye kun