ڪبرنيٽس لاءِ آپريٽر: رياستي ايپليڪيشنن کي ڪيئن هلائڻ

Kubernetes ۾ رياستي ايپليڪيشنن سان مسئلو

ايپليڪيشنن ۽ خدمتن جي ترتيب، لانچ ۽ وڌيڪ اسڪيلنگ آسان آهي جڏهن اهو اچي ٿو ڪيسن جي درجه بندي بي رياست، يعني. ڊيٽا بچائڻ کان سواء. Kubernetes ۾ اهڙين خدمتن کي هلائڻ آسان آهي، ان جي معياري APIs استعمال ڪندي، ڇاڪاڻ ته سڀ ڪجهه ٿئي ٿو "باڪس کان ٻاهر": معياري ترتيبن جي مطابق، بغير ڪنهن خاص يا جادو جي شامل ٿيڻ جي.

آسان لفظ ۾، PHP/Ruby/Python ۾ پٺاڻ جون پنج وڌيڪ ڪاپيون شروع ڪرڻ لاءِ ڪنٽينرز جي ڪلستر ۾، توهان کي صرف 5 ڀيرا نئون سرور قائم ڪرڻ ۽ ذريعن کي نقل ڪرڻ جي ضرورت آهي. جيئن ته ٻئي سورس ڪوڊ ۽ انٽ اسڪرپٽ تصوير ۾ آهن، هڪ اسٽيٽ بيس ايپليڪيشن کي اسڪيلنگ مڪمل طور تي ابتدائي ٿي ويندو آهي. جيئن ته ڪنٽينرز ۽ مائڪروسروس فن تعمير جا مداح چڱي طرح ڄاڻن ٿا، مشڪل سان شروع ٿئي ٿي رياستي ائپس، i.e. ڊيٽا جي تسلسل سان جيئن ڊيٽابيس ۽ ڪيش (MySQL، PostgreSQL، Redis، ElasticSearch، Cassandra...). اهو ٻنهي سافٽ ويئرن تي لاڳو ٿئي ٿو جيڪو آزاديءَ سان ڪورم ڪلسٽر لاڳو ڪري ٿو (مثال طور، Percona XtraDB ۽ Cassandra)، ۽ سافٽ ويئر جنهن کي الڳ انتظامي يوٽيلٽيز جي ضرورت آهي (جهڙوڪ Redis, MySQL, PostgreSQL...).

مشڪلاتون پيدا ٿين ٿيون ڇاڪاڻ ته سورس ڪوڊ ۽ سروس شروع ڪرڻ هاڻي ڪافي نه آهن - توهان کي ڪجهه وڌيڪ قدم کڻڻ جي ضرورت آهي. گھٽ ۾ گھٽ، ڊيٽا کي نقل ڪريو ۽/يا ڪلستر ۾ شامل ٿيو. وڌيڪ واضح طور تي، انهن خدمتن کي سمجهڻ جي ضرورت آهي ته ڪيئن صحيح طريقي سان ماپ، تازه ڪاري ۽ ٻيهر ترتيب ڏيڻ کان سواء ڊيٽا جي نقصان يا عارضي غير موجودگي. انهن ضرورتن کي مدنظر رکندي ”عملي علم“ چئبو آهي.

CoreOS آپريٽرز

"پروگرام" آپريشنل ڄاڻ لاء، گذريل سال جي آخر ۾ CoreOS پروجيڪٽ متعارف ڪرايو "سافٽ ويئر جو هڪ نئون طبقو" Kubernetes پليٽ فارم لاءِ - آپريٽرز (انگريزي مان "آپريشن"، يعني "آپريشن").

آپريٽر ڪبرنيٽس جي بنيادي صلاحيتن کي استعمال ڪرڻ ۽ وڌائڻ (بشمول. رياستي سيٽهيٺ ڏنل فرق ڏسو) DevOps ماهرن کي اجازت ڏيو ته ايپليڪيشن ڪوڊ ۾ آپريشنل ڄاڻ شامل ڪن.

آپريٽر جو مقصد - استعمال ڪندڙ کي هڪ API مهيا ڪريو جيڪا توهان کي اجازت ڏئي ٿي ته ڪيترن ئي رياستي ايپليڪيشن ادارن کي منظم ڪرڻ جي Kubernetes ڪلسٽر ۾، بغير سوچڻ جي ته هوڊ هيٺ ڇا آهي (ڪهڙي ڊيٽا ۽ ان سان ڇا ڪجي، ڪلستر کي برقرار رکڻ لاءِ اڃا تائين ڪهڙن حڪمن تي عمل ڪرڻ جي ضرورت آهي. ). حقيقت ۾، آپريٽر ڊزائين ڪيو ويو آهي ڪم کي آسان ڪرڻ لاءِ ڪلستر اندر ايپليڪيشن سان جيترو ممڪن ٿي سگهي، آپريشنل ڪمن جي عمل کي خودڪار ڪرڻ جيڪي اڳ ۾ دستي طور حل ٿيڻ گهرجن.

ڪيئن آپريٽر ڪم

ReplicaSets ڪبرنيٽس توهان کي اجازت ڏئي ٿو ته هلندڙ پوڊز جو گهربل تعداد بيان ڪري، ۽ ڪنٽرولرز کي يقيني بڻائي ٿو ته انهن جو تعداد برقرار آهي (پڊ ٺاهڻ ۽ حذف ڪندي). هڪ آپريٽر ساڳيءَ طرح ڪم ڪري ٿو، آپريشنل ڄاڻ جو هڪ سيٽ هڪ معياري Kubernetes وسيلن ۽ ڪنٽرولر ۾ شامل ڪري ٿو جيڪو توهان کي اجازت ڏئي ٿو اضافي ڪارناما انجام ڏيڻ لاءِ گهربل تعداد جي ايپليڪيشن ادارن جي مدد لاءِ.

اهو ڪيئن مختلف آهي رياستي سيٽ، ايپليڪيشنن لاءِ ڊزائين ڪيل آھن جن کي ڪلستر جي ضرورت آھي انھن کي رياستي وسيلا مهيا ڪرڻ لاءِ جيئن ڊيٽا اسٽوريج يا جامد IPs؟ اهڙين ايپليڪيشنن لاء، آپريٽرز استعمال ڪري سگھن ٿا رياستي سيٽ (بدران ReplicaSets) بنياد طور، پيشڪش اضافي خودڪار: حادثن جي صورت ۾ ضروري ڪارناما انجام ڏيو، بيڪ اپ ٺاهيو، ترتيب کي اپڊيٽ ڪريو، وغيره.

۽ ائين، هي سڀ ڪيئن ڪم ڪندو آهي؟ آپريٽر هڪ مئنيجر ڊيمن آهي جيڪو:

  1. Kubernetes ۾ ايونٽ API جي رڪنيت حاصل ڪري ٿي؛
  2. ان مان حاصل ڪري ٿو سسٽم بابت ڊيٽا (ان جي باري ۾ ReplicaSets, pods, خدمتون ۽ ايئن.)؛
  3. بابت ڊيٽا حاصل ڪري ٿو ٽئين پارٽي وسيلن (هيٺ مثال ڏسو)؛
  4. ظهور/تبديلي تي رد عمل ٽئين پارٽي وسيلن (مثال طور، سائيز کي تبديل ڪرڻ، نسخو تبديل ڪرڻ، وغيره)؛
  5. سسٽم جي حالت ۾ تبديلين کي رد ڪري ٿو (ان جي باري ۾ ReplicaSets, pods, خدمتون ۽ ايئن.)؛
  6. سڀ کان اهم:
    1. Kubernetes API تي ڪال ڪري ٿو هر شي کي ٺاهڻ لاءِ جيڪو ان جي ضرورت آهي (ٻيهر ، پنهنجو ReplicaSets, pods, خدمتون...) ،
    2. ڪجھ جادو انجام ڏئي ٿو (آسان ڪرڻ لاءِ، توھان سمجھي سگھو ٿا ته آپريٽر پاڻ پوڊز ۾ وڃي ٿو ۽ حڪمن کي ڪال ڪري ٿو، مثال طور، ھڪڙي ڪلستر ۾ شامل ٿيڻ يا ڊيٽا جي فارميٽ کي اپڊيٽ ڪرڻ جڏھن ورجن کي اپڊيٽ ڪرڻ).

ڪبرنيٽس لاءِ آپريٽر: رياستي ايپليڪيشنن کي ڪيئن هلائڻ
حقيقت ۾، جيئن تصوير مان ڏسي سگھجي ٿو، هڪ الڳ ايپليڪيشن صرف Kubernetes ۾ شامل ڪئي وئي آهي (هڪ باقاعده رنيجرز с ريپليڪا سيٽ)، جنهن کي آپريٽر سڏيو ويندو آهي. اهو هڪ عام پوڊ ۾ رهي ٿو (عام طور تي صرف هڪ) ۽، ضابطي جي طور تي، صرف ان لاء ذميوار آهي Namespace. هي آپريٽر ايپليڪيشن ان جي API کي لاڳو ڪري ٿو - جيتوڻيڪ سڌو نه، پر ذريعي ٽئين پارٽي وسيلن ڪبرنيٽس ۾.

اهڙيء طرح، اسان کي پيدا ڪرڻ کان پوء Namespace آپريٽر، اسان ان ۾ شامل ڪري سگھون ٿا ٽئين پارٽي وسيلن.

مثال وغيره (تفصيل لاءِ هيٺ ڏسو):

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. جڏهن به ممڪن هجي، توهان کي ڪبرنيٽس ۾ ٺاهيل primitives استعمال ڪرڻ گهرجي، جهڙوڪ خدمتون и ReplicaSetsچڱي طرح آزمائشي ۽ سمجھڻ وارو ڪوڊ استعمال ڪرڻ لاء.
  4. آپريٽرز جي پسمانده مطابقت جي ضرورت آهي ۽ صارف جي ٺاهيل وسيلن جي پراڻن ورزن لاءِ سپورٽ.
  5. جيڪڏهن آپريٽر کي هٽايو ويو آهي، ايپليڪيشن پاڻ کي بغير تبديلين جي ڪم ڪرڻ جاري رکڻ گهرجي.
  6. صارفين کي گهربل ايپليڪيشن ورزن جي وضاحت ڪرڻ ۽ ايپليڪيشن ورزن جي تازه ڪاري کي ترتيب ڏيڻ جي قابل هوندو. سافٽ ويئر اپڊيٽس جي گھٽتائي آپريشنل ۽ سيڪيورٽي مسئلن جو هڪ عام ذريعو آهي، تنهنڪري آپريٽرز کي هن معاملي ۾ صارفين جي مدد ڪرڻ گهرجي.
  7. آپريٽرز کي هڪ اوزار سان آزمايو وڃي جيئن Chaos Monkey، جيڪو پوڊز، ترتيبن ۽ نيٽ ورڪ ۾ امڪاني ناڪامين جي نشاندهي ڪري ٿو.

وغيره آپريٽر

آپريٽر لاڳو ڪرڻ جو مثال - وغيره آپريٽر، تيار ڪيل هن تصور جي اعلان جي ڏينهن تي. etcd ڪلستر جي ترتيب پيچيده ٿي سگھي ٿي ڇاڪاڻ ته ڪورم کي برقرار رکڻ جي ضرورت، ڪلستر رڪنيت کي ٻيهر ترتيب ڏيڻ جي ضرورت، بيڪ اپ ٺاهڻ، وغيره. مثال طور، دستي طور تي هڪ etcd ڪلسٽر کي اسڪيل ڪرڻ جو مطلب آهي ته توهان کي نئين ڪلسٽر ميمبر لاءِ DNS نالو ٺاهڻ جي ضرورت آهي، هڪ نئون etcd ادارو شروع ڪرڻ، ۽ ڪلستر کي نئين ميمبر بابت خبردار ڪرڻ جي ضرورت آهي (etcdctl ميمبر شامل ڪريو). آپريٽر جي صورت ۾، صارف کي صرف ڪلستر جي سائيز کي تبديل ڪرڻ جي ضرورت پوندي - باقي سڀ ڪجھ خودڪار ٿيندو.

۽ جيئن ته etcd پڻ CoreOS ۾ ٺاهي وئي هئي، اهو ڪافي منطقي هو ته ان جو آپريٽر پهريون ڀيرو ظاهر ٿيو. هو ڪيئن ڪم ڪندو آهي؟ آپريٽر منطق وغيره ٽن حصن طرفان طئي ٿيل آهي:

  1. مشاهدو. آپريٽر ڪبرنيٽس API استعمال ڪندي ڪلستر جي حالت مانيٽر ڪري ٿو.
  2. تجزيو. موجوده حيثيت ۽ مطلوبه جي وچ ۾ فرق ڳولي ٿو (يوزر جي ترتيب سان بيان ڪيل).
  3. عمل. اي سي ڊي ۽/يا ڪبرنيٽس سروس APIs استعمال ڪندي معلوم ڪيل اختلافن کي حل ڪري ٿو.

ڪبرنيٽس لاءِ آپريٽر: رياستي ايپليڪيشنن کي ڪيئن هلائڻ

هن منطق کي لاڳو ڪرڻ لاء، آپريٽر ۾ افعال تيار ڪيا ويا آهن ٺاھڻ/تباھ ڪرڻ (etcd ڪلسٽر ميمبرن ٺاهڻ ۽ ختم ڪرڻ) ۽ ترتيب ڏيو (ڪلسٽر ميمبرن جي تعداد ۾ تبديلي). Netflix کان افراتفري بندر جي مشابهت ۾ ٺاهيل يوٽيليٽي استعمال ڪندي ان جي آپريشن جي درستگي جي جانچ ڪئي وئي، يعني. مارڻ وغيره پوڊ بي ترتيب.

etcd جي مڪمل آپريشن لاءِ، آپريٽر اضافي خاصيتون مهيا ڪري ٿو: بيڪ اپ (خودڪار ۽ پوشيده صارفين لاءِ بيڪ اپ ڪاپيون ٺاهڻ - ترتيب ۾ اهو طئي ڪرڻ لاءِ ڪافي آهي ته انهن کي ڪيترا ڀيرا ٺاهيو وڃي ۽ ڪيترو ذخيرو ڪجي - ۽ بعد ۾ انهن مان ڊيٽا جي بحالي) ۽ واڌاري (ڊائونٽائم کان سواءِ 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+ جي ضرورت آهي. ماخذ ڪوڊ ۽ دستاويز (استعمال لاء هدايتون شامل آهن) تي موجود آهن GitHub.

CoreOS مان هڪ ٻيو مثال لاڳو ڪيو ويو آهي - Prometheus آپريٽر، پر اهو اڃا تائين الفا ورزن ۾ آهي (سڀني منصوبابندي ڪيل خاصيتون لاڳو نه ڪيون ويون آهن).

حالتون ۽ امڪان

Kubernetes آپريٽرز جي اعلان کان 5 مهينا گذري ويا آهن. سرڪاري CoreOS مخزن ۾ اڃا تائين صرف ٻه عمل موجود آهن (etcd ۽ Prometheus لاءِ). ٻئي اڃا تائين انهن جي مستحڪم نسخن تائين پهچي نه ويا آهن، پر ڪمن کي روزانه بنيادن تي مشاهدو ڪيو ويندو آهي.

ڊولپرز "هڪ مستقبل جو تصور ڪن ٿا جنهن ۾ صارفين پوسٽ گريس آپريٽرز، ڪئاسنڊرا آپريٽرز يا ريڊس آپريٽرز کي انهن جي ڪبرنيٽس ڪلسٽرز تي نصب ڪن ٿا ۽ انهن ايپليڪيشنن جي اسپيبلبل ادارن سان آساني سان ڪم ڪن ٿا جيئن بي رياست ويب ايپليڪيشنن جي نقلن کي ترتيب ڏيڻ اڄ آهي." پهريون ٽئين پارٽي ڊولپرز کان آپريٽرز واقعي ظاهر ٿيڻ لڳو:

سڀ کان وڏي يورپي مفت سافٽ ويئر ڪانفرنس FOSDEM ۾، جيڪا فيبروري 2017 ۾ برسلز ۾ ٿي، CoreOS کان جوش ووڊ آپريٽرز جو اعلان ڪيو. رپورٽ (هڪ وڊيو لنڪ تي موجود آهي!)، جنهن کي وسيع اوپن سورس ڪميونٽي ۾ هن تصور جي مقبوليت ۾ اضافو ڪرڻ گهرجي.

پي ايس مضمون ۾ توهان جي دلچسپي لاء مهرباني! رڪنيت حاصل ڪريو اسان جي مرڪز، ته جيئن DevOps ۽ GNU/Linux سسٽم ايڊمنسٽريشن تي نوان مواد ۽ ترڪيبون نه وڃائجن - اسان انهن کي باقاعده شايع ڪنداسين!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو