ኦፕሬተሮች ለ Kubernetes: ሁኔታዊ መተግበሪያዎችን እንዴት ማሄድ እንደሚቻል

በ Kubernetes ውስጥ ያሉ ትክክለኛ አፕሊኬሽኖች ችግር

አፕሊኬሽኖችን እና አገልግሎቶችን ማዋቀር፣ ማስጀመር እና ተጨማሪ ልኬት ማድረግ ቀላል ነው አገር አልባ ተብለው የተመደቡ ጉዳዮችን በተመለከተ፣ ማለትም ውሂብ ሳያስቀምጡ. መደበኛውን ኤፒአይዎችን በመጠቀም በ Kubernetes ውስጥ እንደዚህ ያሉ አገልግሎቶችን ለማስኬድ ምቹ ነው ፣ ምክንያቱም ሁሉም ነገር የሚከናወነው “ከሳጥኑ ውስጥ” ነው-በመደበኛ አወቃቀሮች መሠረት ፣ ምንም ዓይነት ዝርዝር እና አስማት ሳያካትት።

በቀላል አነጋገር በ PHP/Ruby/Python ውስጥ ተጨማሪ አምስት ቅጂዎችን በክላስተር ኮንቴይነሮች ውስጥ ለማስጀመር አዲስ አገልጋይ 5 ጊዜ ብቻ ማዘጋጀት እና ምንጮቹን መቅዳት ያስፈልግዎታል። ሁለቱም የምንጭ ኮድ እና የኢንቲት ስክሪፕት በምስሉ ውስጥ ስላሉ፣ ሀገር አልባ መተግበሪያን ማመጣጠን ሙሉ በሙሉ አንደኛ ደረጃ ይሆናል። የመያዣዎች እና የማይክሮ ሰርቪስ አርክቴክቸር አድናቂዎች በደንብ እንደሚያውቁት ችግሩ የሚጀምረው በ ነው። ሁኔታዊ መተግበሪያዎች፣ ማለትም እ.ኤ.አ. እንደ የውሂብ ጎታዎች እና መሸጎጫዎች (MySQL, PostgreSQL, Redis, ElasticSearch, ካሳንድራ...) ባሉ የውሂብ ጽናት. ይህ ሁለቱንም ኮረም ዘለላ (ለምሳሌ Percona XtraDB እና Cassandra) እና የተለየ የአስተዳደር መገልገያዎችን (እንደ Redis፣ MySQL፣ PostgreSQL... ያሉ) የሚጠይቁ ሶፍትዌሮችንም ይመለከታል።

የምንጭ ኮድ እና አገልግሎቱን ማስጀመር በቂ ስላልሆኑ ችግሮች ይነሳሉ - አንዳንድ ተጨማሪ እርምጃዎችን ማከናወን ያስፈልግዎታል። ቢያንስ ውሂቡን ይቅዱ እና/ወይም ክላስተር ይቀላቀሉ። ይበልጥ በትክክል፣ እነዚህ አገልግሎቶች ያለመረጃ መጥፋት ወይም ጊዜያዊ አለመገኘት እንዴት በአግባቡ መመዘን፣ ማዘመን እና እንደገና ማዋቀር እንደሚችሉ ግንዛቤ ያስፈልጋቸዋል። እነዚህን ፍላጎቶች ግምት ውስጥ ማስገባት "የሥራ ዕውቀት" ይባላል.

CoreOS ኦፕሬተሮች

የክወና እውቀትን "ፕሮግራም" ለማድረግ፣ ባለፈው አመት መጨረሻ የCoreOS ፕሮጀክት አስተዋውቋል “አዲስ የሶፍትዌር ክፍል” ለ Kubernetes መድረክ - ኦፕሬተሮች (ከእንግሊዝኛ “ኦፕሬሽን” ፣ ማለትም “ኦፕሬሽን”)።

ኦፕሬተሮች የኩበርኔትስን ዋና ችሎታዎች እየተጠቀሙ እና እያራዘሙ ነው (ጨምሮ። StatefulSets, ከዚህ በታች ያለውን ልዩነት ይመልከቱ) የዴቭኦፕስ ስፔሻሊስቶች የአሠራር እውቀትን ወደ መተግበሪያ ኮድ እንዲያክሉ ይፍቀዱ.

የኦፕሬተር ዓላማ - በኮድ ውስጥ ምን እንዳለ ሳያስቡ (ምን ውሂብ እና ምን እንደሚደረግበት ፣ ክላስተርን ለማቆየት ምን ትዕዛዞች አሁንም መከናወን እንዳለባቸው ሳያስቡ በ Kubernetes ክላስተር ውስጥ ያሉ በርካታ የመተግበሪያ አካላትን እንዲያስተዳድሩ የሚያስችልዎትን ኤፒአይ ለተጠቃሚው ያቅርቡ) ). በእርግጥ ኦፕሬተሩ በተቻለ መጠን በክላስተር ውስጥ ካለው መተግበሪያ ጋር ስራውን ለማቃለል የተነደፈ ሲሆን ከዚህ ቀደም በእጅ መፈታት የነበረባቸው የአሠራር ተግባራትን በራስ-ሰር እንዲፈጽም ለማድረግ ነው።

ኦፕሬተሮች እንዴት እንደሚሠሩ

ReplicaSets Kubernetes የሚፈለጉትን የሩጫ ፓዶች ቁጥር እንዲገልጹ ያስችልዎታል, እና ተቆጣጣሪዎች ቁጥራቸው መያዙን ያረጋግጣሉ (በመፍጠር እና በመሰረዝ). አንድ ኦፕሬተር በተመሳሳይ መንገድ ይሰራል, አስፈላጊውን የመተግበሪያ አካላት ብዛት ለመደገፍ ተጨማሪ እርምጃዎችን እንዲያደርጉ የሚያስችልዎትን መደበኛ የኩበርኔትስ ምንጭ እና ተቆጣጣሪ ላይ የተግባር እውቀት ስብስብ በመጨመር.

ይህ በምን ይለያል StatefulSets, ክላስተር እንደ የውሂብ ማከማቻ ወይም የማይንቀሳቀስ አይፒዎች ያሉ መንግስታዊ ሀብቶችን እንዲያቀርብላቸው ለሚፈልጉ መተግበሪያዎች የተነደፈ? ለእንደዚህ አይነት አፕሊኬሽኖች ኦፕሬተሮች መጠቀም ይችላሉ። StatefulSets (ይልቁን ReplicaSets) እንደ መሠረት, በማቅረብ ተጨማሪ አውቶማቲክ: በአደጋ ጊዜ አስፈላጊ እርምጃዎችን ያከናውኑ, ምትኬዎችን ያድርጉ, አወቃቀሩን ያዘምኑ, ወዘተ.

እና ስለዚህ, ይህ ሁሉ እንዴት ይሠራል? ኦፕሬተሩ የሚከተለውን የሚያቀናብር ዴሞን ነው፡-

  1. Kubernetes ውስጥ ያለውን ክስተት API ተመዝግቧል;
  2. ስለ ስርዓቱ መረጃ ከእሱ ይቀበላል (ስለ እሱ ReplicaSets, ይመኝ, አገልግሎቶች እናም ይቀጥላል.);
  3. ስለ ውሂብ ይቀበላል የሶስተኛ ወገን ሀብቶች (ከዚህ በታች ያሉትን ምሳሌዎች ይመልከቱ);
  4. መልክ / ለውጥ ምላሽ ይሰጣል የሶስተኛ ወገን ሀብቶች (ለምሳሌ, መጠኑን ለመለወጥ, ስሪቱን ለመለወጥ, ወዘተ);
  5. በስርዓቱ ሁኔታ ላይ ለሚደረጉ ለውጦች ምላሽ ይሰጣል (ስለ በውስጡ ReplicaSets, ይመኝ, አገልግሎቶች እናም ይቀጥላል.);
  6. በጣም አስፈላጊ:
    1. የሚፈልገውን ነገር ሁሉ ለመፍጠር ወደ Kubernetes ኤፒአይ ይደውላል (እንደገና የራሱ ReplicaSets, ይመኝ, አገልግሎቶች…) ፣
    2. አንዳንድ አስማት ይሰራል (ለማቅለል ኦፕሬተሩ እራሱ ወደ ፖድፖቹ ገብቶ ትእዛዞችን ይጠራል ለምሳሌ ክላስተር ለመቀላቀል ወይም አንድን ስሪት ሲያዘምን የውሂብ ቅርጸቱን ለማሻሻል ያስባሉ)።

ኦፕሬተሮች ለ Kubernetes: ሁኔታዊ መተግበሪያዎችን እንዴት ማሄድ እንደሚቻል
በእውነቱ ፣ ከሥዕሉ ላይ እንደሚታየው ፣ የተለየ መተግበሪያ በቀላሉ ወደ Kubernetes (መደበኛ ማሰማራት с ReplicaSet), እሱም ኦፕሬተር ይባላል. የሚኖረው በተራ ፖድ ውስጥ ነው (ብዙውን ጊዜ አንድ ብቻ) እና እንደ አንድ ደንብ, ለእሱ ብቻ ተጠያቂ ነው ዊኪ. ይህ ኦፕሬተር መተግበሪያ ኤፒአይውን ይተገበራል - ምንም እንኳን በቀጥታ ባይሆንም ፣ ግን በ የሶስተኛ ወገን ሀብቶች በኩበርኔትስ ውስጥ.

ስለዚህ, ከፈጠርን በኋላ ዊኪ ኦፕሬተር, ወደ እሱ መጨመር እንችላለን የሶስተኛ ወገን ሀብቶች.

ምሳሌ ለ ወዘተ (ለዝርዝሩ ከዚህ በታች ይመልከቱ):

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

የ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

ለኦፕሬተሮች መስፈርቶች

CoreOS በኦፕሬተሮች ላይ በሚሰራበት ጊዜ በመሐንዲሶች የተገኙትን ዋና ቅጦች ቀርጿል። ምንም እንኳን ሁሉም ኦፕሬተሮች ግላዊ ቢሆኑም (የራሳቸው ባህሪዎች እና ፍላጎቶች ላለው ለተወሰነ መተግበሪያ የተፈጠሩ) ፣ አፈጣጠራቸው የሚከተሉትን መስፈርቶች በሚያስገድድ ማዕቀፍ ላይ የተመሠረተ መሆን አለበት ።

  1. መጫኑ በአንድ ነጠላ በኩል መከናወን አለበት ማሰማራት: kubectl መፍጠር -f SOME_OPERATOR_URL/deployment.yaml - እና ተጨማሪ እርምጃዎች አያስፈልጉም.
  2. በ Kubernetes ውስጥ ኦፕሬተርን ሲጭኑ, አዲስ የሶስተኛ ወገን አይነት መፈጠር አለበት (የሶስተኛ ወገን ሀብት). የመተግበሪያ ምሳሌዎችን (ክላስተር አብነቶችን) ለማስጀመር እና እነሱን የበለጠ ለማስተዳደር (ስሪቶችን ማዘመን፣ መጠን መቀየር፣ ወዘተ) ተጠቃሚው ይህን አይነት ይጠቀማል።
  3. በሚቻልበት ጊዜ ሁሉ በኩበርኔትስ ውስጥ የተገነቡትን ፕሪሚየም መጠቀም አለቦት ለምሳሌ አገልግሎቶች и ReplicaSetsበደንብ የተፈተነ እና ሊረዳ የሚችል ኮድ ለመጠቀም።
  4. የኦፕሬተሮችን ወደ ኋላ ተኳሃኝነት እና በተጠቃሚ ለተፈጠሩ የቆዩ ስሪቶች ድጋፍ ይፈልጋል።
  5. ኦፕሬተሩ ከተወገደ, አፕሊኬሽኑ ራሱ ያለ ለውጦች መስራቱን መቀጠል አለበት.
  6. ተጠቃሚዎች የሚፈለገውን የመተግበሪያ ሥሪት መግለፅ እና የመተግበሪያ ሥሪት ማሻሻያዎችን ማቀናበር መቻል አለባቸው። የሶፍትዌር ማሻሻያ እጥረት የተለመደ የአሠራር እና የደህንነት ችግሮች ምንጭ ነው፣ ስለዚህ ኦፕሬተሮች በዚህ ጉዳይ ላይ ተጠቃሚዎችን መርዳት አለባቸው።
  7. ኦፕሬተሮች እንደ Chaos Monkey ባሉ መሳሪያዎች መሞከር አለባቸው፣ ይህም በፖዳዎች፣ ውቅሮች እና አውታረ መረቦች ውስጥ ሊከሰቱ የሚችሉ ውድቀቶችን ይለያል።

ወዘተ ኦፕሬተር

የኦፕሬተር ትግበራ ምሳሌ - ወዘተ ኦፕሬተር; ተዘጋጅቷል የዚህ ጽንሰ-ሐሳብ በሚታወቅበት ቀን. የ etcd ክላስተር ውቅር ውስብስብ ሊሆን የሚችለው ምልአተ ጉባኤን ለመጠበቅ ስለሚያስፈልገው፣ የክላስተር አባልነትን እንደገና የማዋቀር አስፈላጊነት፣ ምትኬዎችን ለመፍጠር፣ ወዘተ. ለምሳሌ፣ የ etcd ክላስተርን በእጅ ማመጣጠን ማለት ለአዲስ ክላስተር አባል የዲ ኤን ኤስ ስም መፍጠር፣ አዲስ ወዘተ ህጋዊ አካል መጀመር እና ስለ አዲሱ አባል ክላስተርን ማስጠንቀቅ ያስፈልግዎታል ማለት ነው።etcdctl አባል አክል). በኦፕሬተሩ ሁኔታ ተጠቃሚው የክላስተር መጠኑን መለወጥ ብቻ ነው የሚፈልገው - ሁሉም ነገር በራስ-ሰር ይከሰታል።

እና etcd በCoreOS ውስጥ ስለተፈጠረ፣ ኦፕሬተሩ መጀመሪያ ሲመጣ ማየት በጣም ምክንያታዊ ነበር። እንዴት ነው የሚሰራው? ኦፕሬተር ሎጂክ ወዘተ በሶስት አካላት ይወሰናል.

  1. አስተውል ። ኦፕሬተሩ የኩበርኔትስ ኤፒአይን በመጠቀም የክላስተር ሁኔታን ይከታተላል።
  2. ትንተና. አሁን ባለው ሁኔታ እና በሚፈለገው መካከል ያለውን ልዩነት ያገኛል (በተጠቃሚው ውቅር የተገለጸ)።
  3. ድርጊት። ወዘተd እና/ወይም Kubernetes አገልግሎት ኤፒአይዎችን በመጠቀም የተገኙ ልዩነቶችን ይፈታል።

ኦፕሬተሮች ለ Kubernetes: ሁኔታዊ መተግበሪያዎችን እንዴት ማሄድ እንደሚቻል

ይህንን አመክንዮ ለመተግበር በኦፕሬተሩ ውስጥ ተግባራት ተዘጋጅተዋል ፍጠር/አጥፋ (ወዘተ ክላስተር አባላትን መፍጠር እና መሰረዝ) እና መጠን ቀይር (በክላስተር አባላት ቁጥር ላይ ለውጥ). የአሠራሩ ትክክለኛነት ከኔትፍሊክስ ከ Chaos Monkey ጋር በሚመሳሰል መልኩ የተፈጠረውን መገልገያ በመጠቀም ተረጋግጧል፣ ማለትም። ወዘተ በዘፈቀደ መግደል።

ለ etcd ሙሉ ስራ ኦፕሬተሩ ተጨማሪ ባህሪያትን ይሰጣል፡- ምትኬ (አውቶማቲክ እና ለተጠቃሚዎች የማይታዩ የመጠባበቂያ ቅጂዎችን መፍጠር - በማዋቀሩ ውስጥ ምን ያህል ጊዜ እንደሚሰሩ እና ምን ያህል እንደሚከማቹ ለመወሰን በቂ ነው - እና ከዚያ በኋላ የነሱን ውሂብ ወደነበረበት መመለስ) እና አሻሽል (ወዘተ መጫኑን ያለማቋረጥ ማዘመን)።

ከኦፕሬተር ጋር መስራት ምን ይመስላል?

$ 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

አሁን ያለው የ etcd ኦፕሬተር ሁኔታ የቅድመ-ይሁንታ ስሪት ነው፣ ለማሄድ Kubernetes 1.5.3+ እና etcd 3.0+ ያስፈልገዋል። የምንጭ ኮድ እና ሰነዶች (የአጠቃቀም መመሪያዎችን ጨምሮ) በ ላይ ይገኛሉ የፊልሙ.

ከCoreOS ሌላ ምሳሌ ትግበራ ተፈጥሯል - ፕሮሜቲየስ ኦፕሬተር, ግን አሁንም በአልፋ ስሪት ውስጥ ነው (ሁሉም የታቀዱ ባህሪያት አልተተገበሩም).

ሁኔታ እና ተስፋዎች

የኩበርኔትስ ኦፕሬተሮች ከታወጀ 5 ወራት አልፈዋል። በኦፊሴላዊው የCoreOS ማከማቻ (ለ etcd እና Prometheus) ውስጥ አሁንም ሁለት ትግበራዎች ብቻ አሉ። ሁለቱም የተረጋጉ እትሞች ገና አልደረሱም ፣ ግን ቁርጠኝነት በየቀኑ ይስተዋላል።

ገንቢዎቹ “ተጠቃሚዎች Postgres Operatorsን፣ ካሳንድራ ኦፕሬተሮችን ወይም ሬዲስ ኦፕሬተሮችን በኩበርኔትስ ክላስተር የሚጭኑበት እና ከእነዚህ መተግበሪያዎች ሊሰፋ ከሚችል አካላት ጋር የሚሰሩበት፣ ሀገር አልባ የድረ-ገጽ አፕሊኬሽኖች ዛሬ እንደሚሰማሩ ሁሉ የወደፊቱን ጊዜ አስበዋል። አንደኛ ከሶስተኛ ወገን ገንቢዎች ኦፕሬተሮች በእውነት መታየት ጀመረ፡-

በየካቲት 2017 በብራስልስ በተካሄደው ትልቁ የአውሮፓ ነፃ የሶፍትዌር ኮንፈረንስ FOSDEM ላይ ጆሽ ዉድ ከCoreOS ኦፕሬተሮችን በ ሪፖርት (ቪዲዮ በአገናኙ ላይ ይገኛል!) ፣ ይህም በሰፊው ክፍት ምንጭ ማህበረሰብ ውስጥ የዚህ ጽንሰ-ሀሳብ ተወዳጅነት እንዲያድግ አስተዋጽኦ ማድረግ አለበት።

PS ለጽሑፉ ፍላጎትዎ እናመሰግናለን! ለማዕከላችን ይመዝገቡበ DevOps እና GNU/Linux ስርዓት አስተዳደር ላይ አዳዲስ ቁሳቁሶችን እና የምግብ አዘገጃጀቶችን እንዳያመልጥዎት - በመደበኛነት እናተምታቸዋለን!

ምንጭ: hab.com

አስተያየት ያክሉ