etcd-آپریٹر ٹول کٹ، جو Kubernetes میں etcd کلسٹرز کی تعیناتی اور برقرار رکھنے میں مدد کرتی ہے، Cozystack پروجیکٹ میں منتقل کر دی گئی ہے۔ منتقلی کے ساتھ، etcd-آپریٹر کا ایک نیا نفاذ شائع کیا گیا تھا، جو شروع سے لکھا گیا تھا اور پچھلی etcd.aenix.io/v1alpha1 کی بجائے etcd-operator.cozystack.io/v1alpha2 پر API کا استعمال کیا گیا تھا۔ نیا نفاذ Timofey Larkin نے لکھا تھا، جو پچھلے کوڈ بیس کے مینٹینرز میں سے ایک تھا۔ پرانا ورژن v1alpha1 برانچ میں محفوظ ہے۔ کوڈ گو میں لکھا گیا ہے اور اپاچی 2.0 لائسنس کے تحت تقسیم کیا گیا ہے۔ Cozystack غیر منافع بخش تنظیم CNCF کا ایک سینڈ باکس پروجیکٹ ہے۔
نئے etcd-آپریٹر میں اہم تبدیلی نوڈ مینجمنٹ کے لیے StatefulSet کو ہٹانا ہے۔ اب، آپریٹر براہ راست etcd کے مقامی ممبرشپ API (MemberAdd، MemberPromote، اور MemberRemove) تک رسائی حاصل کرتا ہے اور خود بخود اراکین کو شامل کرتا ہے، سیکھنے والوں کو ووٹنگ نوڈس میں فروغ دیتا ہے، اور کورم سے نوڈس کو ہٹاتا ہے، جس سے آپریٹر کو کلسٹر کی رکنیت پر مکمل کنٹرول ملتا ہے۔
متوازی طور پر، etcd پروجیکٹ کے ڈویلپر شروع سے اپنا سرکاری etcd-آپریٹر تیار کر رہے ہیں۔ فعالیت کے لحاظ سے، آفیشل آپریٹر فی الحال Cozystack پروجیکٹ کے etcd-آپریٹر سے کمتر ہے۔ چونکہ etcd-operator کا پچھلا نفاذ پہلے سے ہی پیداواری ماحول میں کام کرتا ہے اور Cozystack اور Kamaji میں استعمال ہوتا ہے، اس لیے اس کی ترقی کو سرکاری etcd پروجیکٹ کے نفاذ سے الگ سے جاری رکھا گیا۔
Cozystack پروجیکٹ کا آپریٹر دو وسائل کے ذریعے etcd کلسٹرز کا انتظام کرتا ہے۔ EtcdCluster مطلوبہ حالت کی وضاحت کرتا ہے: نقل کی تعداد، etcd ورژن، اسٹوریج پیرامیٹرز، TLS، تصدیق، اور etcd ترتیبات۔ ہر کلسٹر نوڈ کے لیے ایک etcdMember بنایا گیا ہے اور اس کے Pod اور PVC کا مالک ہے۔ عام حل کے برعکس، آپریٹر اسٹیٹفول سیٹ استعمال نہیں کرتا ہے اور ہر نوڈ کے پوڈ اور پی وی سی کو آزادانہ طور پر منظم کرتا ہے۔ کلسٹر ممبرشپ کو etcd ممبرشپ API کے ذریعے تبدیل کیا جاتا ہے: آپریٹر نئے نوڈس کو سیکھنے والوں (MemberAdd) کے طور پر شامل کرتا ہے، پھر انہیں ووٹنگ ممبرز (MemberPromote) میں ترقی دیتا ہے۔ کورم سے مناسب ہٹانے کے ساتھ، ممبر ریمو کے ذریعے حذف کیا جاتا ہے۔ جب کلسٹر کو روک دیا جاتا ہے، نوڈس اپنی شناخت برقرار رکھتے ہیں۔
اہم خصوصیات:
- کلسٹر کی تعیناتی اور دونوں سمتوں میں اسکیلنگ، ایک وقت میں ایک نوڈ: نئے نوڈ سیکھنے والے موڈ میں شروع ہوتے ہیں، اور انہیں صحیح طریقے سے حذف کرنے سے انہیں کورم سے ہٹا دیا جاتا ہے۔
- ڈیٹا کے نقصان کے بغیر کلسٹر کو روکنا (spec.replicas: 0) اور اسی کلسٹر اور نوڈ IDs کے ساتھ دوبارہ آپریشن شروع کرنا۔
- ڈیٹا کو PVC میں بطور ڈیفالٹ یا tmpfs میں محفوظ کیا جاتا ہے اگر ڈیٹا کو بحال کیا جا سکتا ہے۔ اگر کوئی پوڈ کھو جاتا ہے، تو آپریٹر خود بخود نوڈس کو ان میموری اسٹوریج کے ساتھ دوبارہ بناتا ہے۔
- کلائنٹ اور انٹر نوڈ کنکشن کے لیے علیحدہ TLS کنفیگریشن: آپ اپنے سیکرٹس کو جوڑ سکتے ہیں یا آپریٹر کو سرٹیفکیٹ مینیجر کے ذریعے جاری کرنے اور ان کی تجدید کرنے کی ہدایت کر سکتے ہیں۔
- ایک واحد جڑ صارف کے ساتھ تصدیق؛ اس کی اسناد سیکرٹ کے ذریعے سیٹ کی جاتی ہیں۔
- EtcdSnapshot وسائل کے ذریعے S3 یا PVC میں سنیپ شاٹس بنانا اور پہلی تعیناتی کے دوران اسنیپ شاٹ سے کلسٹر کو بحال کرنا؛
- خودکار PodDisruption Budget، جو ڈرین آپریشنز کو کورم میں خلل ڈالنے سے روکتا ہے۔
- ویب ہکس اور سرٹیف مینیجر پر انحصار کے بغیر، CRD میں CEL اظہار کے ذریعے apiserver کے ذریعے تصریحات کی توثیق؛
- /اسکیل ذیلی وسائل برائے kubectl اسکیل اور VerticalPodAutoscaler، میٹرکس پورٹ 2381، affinity اور topologySpread Constraints فارورڈنگ؛
- کلسٹر کی تعیناتی کے بعد دن-2 کی کارروائیوں کے لیے kubectl-etcd پلگ ان۔
پرانے نفاذ (v1alpha1) کے مقابلے میں، درج ذیل میں تبدیلی آئی ہے۔
- API گروپ etcd.aenix.io سے etcd-operator.cozystack.io میں تبدیل ہو گیا ہے۔
- StatefulSet کے بجائے، آپریٹر ہر نوڈ کے لیے علیحدہ EtcdMember وسیلہ استعمال کرتا ہے۔
- صوابدیدی spec.options ڈکشنری کو پیرامیٹرز کے ٹائپ کردہ سیٹ کے ساتھ تبدیل کر دیا گیا ہے: کوٹا بیک اینڈ بائٹس، آٹو کمپیکٹیفیکیشن موڈ اور وقفہ، سنیپ شاٹ کاؤنٹ؛ ایک مفت نقشہ نے جھنڈوں کو منتقل کرنے کی اجازت دی جو آپریٹر کی منطق سے متصادم ہے۔
- EtcdBackup وسائل کا نام تبدیل کر کے EtcdSnapshot رکھ دیا گیا ہے، سیمنٹکس محفوظ ہیں۔
- توثیق کو CRD میں ویب ہک سے CEL قواعد میں منتقل کر دیا گیا ہے۔
- کلسٹر سروس کو ہیڈ لیس موڈ میں تبدیل کر دیا گیا ہے تاکہ نوڈس کے DNS نام مستحکم ہوں۔
ہجرت جگہ جگہ etcd-migrate کا استعمال کرتے ہوئے کی جاتی ہے۔ یہ ٹول پرانے آپریٹر کے چلنے والے کلسٹر کو ڈیٹا کی منتقلی، پوڈ کے دوبارہ شروع ہونے، یا کورم کے نقصان کے بغیر ڈھال لیتا ہے۔ یہ صرف آبجیکٹ کے مالکان، لیبلز اور تشریحات کو تبدیل کرتا ہے۔ اس کے بعد، نیا آپریٹر کنٹرول سنبھال لیتا ہے۔ DNS کے ذریعے کلسٹر تک رسائی حاصل کرنے والے کلائنٹ بغیر کسی تبدیلی کے کام کرتے رہتے ہیں۔
Cozystack کے etcd-operator کا نفاذ etcd پروجیکٹ کے آفیشل etcd آپریٹر کے لیے زیادہ تر روڈ میپ آئٹمز کو ایڈریس کرتا ہے۔ روڈ میپ آئٹمز کی حیثیت درج ذیل ہے:
مزید برآں، v1alpha2 ایسی خصوصیات پیش کرتا ہے جو آفیشل آپریٹر کے ترقیاتی منصوبے میں شامل نہیں ہیں:
- کلسٹر کو اس وقت تک روکنا جب تک کہ کوئی نقل نہ ہو، کلسٹر اور نوڈس کی شناخت کو برقرار رکھتے ہوئے روکنا اور دوبارہ شروع کرنا؛
- آپریٹر کے ذریعہ خودکار نوڈ کی تبدیلی کے ساتھ ان میموری اسٹوریج (tmpfs)؛
- ویب ہکس اور سرٹیفکیٹس پر انحصار کے بغیر، CEL کے ذریعے apiserver کی طرف توثیق؛
- ووٹنگ نوڈس کے لیے خودکار PodDisruptionBudget؛
- /scale subresource with status.selector بھرا ہوا ہے تاکہ kubectl اسکیل اور VerticalPodAutoscaler.targetRef براہ راست کام کریں۔
- وابستگی اور ٹاپولوجی اسپریڈ کنسٹرائنٹس پلاننگ پیرامیٹرز کو آگے بڑھانا، نیز آپریٹر کے ذریعہ تخلیق کردہ تمام اشیاء میں اضافی میٹا ڈیٹا کو ضم کرنا؛
- کلسٹر کو روکے بغیر پچھلے آپریٹر سے ہجرت کا ٹول؛
- آپریشنل کاموں کے لیے kubectl-etcd پلگ ان۔
ماخذ: opennet.ru
