کبرنیٹس کی ترقی کے لیے اسکافولڈ کا جائزہ

کبرنیٹس کی ترقی کے لیے اسکافولڈ کا جائزہ

ڈیڑھ سال قبل، 5 مارچ 2018 کو، گوگل نے اپنے اوپن سورس پروجیکٹ کا پہلا الفا ورژن CI/CD کے لیے جاری کیا سکافولڈجس کا مقصد "سادہ اور دوبارہ قابل تکرار Kubernetes ڈویلپمنٹ" بنانا تھا تاکہ ڈویلپر انتظامیہ کی بجائے ترقی پر توجہ مرکوز کر سکیں۔ Skaffold کے بارے میں کیا دلچسپ ہو سکتا ہے؟ جیسا کہ یہ پتہ چلتا ہے، اس کی آستین میں کچھ چالیں ہیں جو اسے ڈویلپر، اور شاید آپریشنز انجینئر کے لیے ایک طاقتور ٹول بنا سکتی ہیں۔ آئیے اس منصوبے اور اس کی صلاحیتوں سے واقف ہوں۔

NB: ویسے، ہم اپنے جنرل میں اسکافولڈ کے بارے میں پہلے ہی مختصر بات کر چکے ہیں۔ ڈویلپر ٹولز کا جائزہ، جن کی زندگیاں Kubernetes سے جڑی ہوئی ہیں۔

نظریہ. مقصد اور صلاحیتیں۔

لہذا، عام طور پر، Skaffold CI/CD سائیکل کو خودکار کرنے کے مسئلے کو حل کرتا ہے (تعمیر، دھکا، تعیناتی کے مراحل پر)، ڈویلپر کو فوری تاثرات پیش کرتا ہے، یعنی بعد میں ہونے والی کوڈ کی تبدیلیوں کا نتیجہ فوری طور پر حاصل کرنے کی صلاحیت - Kubernetes کلسٹر میں چلنے والی ایک اپ ڈیٹ ایپلی کیشن کی شکل میں۔ اور یہ مختلف سرکٹس (ڈیو، سٹیج، پروڈکشن...) میں کام کر سکتا ہے، جس کے لیے اسکافولڈ رول آؤٹ کے لیے متعلقہ پائپ لائنوں کو بیان کرنے میں مدد کرتا ہے۔

Skaffold کا سورس کوڈ Go میں لکھا ہوا ہے، نے بانٹا مفت اپاچی لائسنس 2.0 (گٹ ہب) کے تحت۔

آئیے اہم افعال اور خصوصیات کو دیکھیں۔ پہلے میں درج ذیل شامل ہیں:

  • سکافولڈ CI/CD پائپ لائنز بنانے کے لیے ٹولز پیش کرتا ہے۔
  • آپ کو پس منظر میں سورس کوڈ میں ہونے والی تبدیلیوں کی نگرانی کرنے اور کنٹینر امیجز میں کوڈ کو جمع کرنے، ان تصاویر کو Docker رجسٹری میں شائع کرنے اور انہیں Kubernetes کلسٹر میں تعینات کرنے کا ایک خودکار عمل چلانے کی اجازت دیتا ہے۔
  • ریپوزٹری میں موجود فائلوں کو کنٹینر میں ورکنگ ڈائرکٹری کے ساتھ سنکرونائز کرتا ہے۔
  • کنٹینر-سٹرکچر-ٹیسٹ کا استعمال کرتے ہوئے خودکار طور پر ٹیسٹ کرتا ہے۔
  • بندرگاہوں کو آگے بڑھاتا ہے۔
  • کنٹینر میں چلنے والی ایپلیکیشن کے لاگز کو پڑھتا ہے۔
  • Java، Node.js، Python، Go میں لکھی گئی ایپلی کیشنز کو ڈیبگ کرنے میں مدد کرتا ہے۔

اب خصوصیات کے بارے میں:

  • اسکافولڈ میں خود کوئی کلسٹر سائیڈ اجزاء نہیں ہیں۔. یعنی اس افادیت کو استعمال کرنے کے لیے کوبرنیٹس کو مزید کنفیگر کرنے کی ضرورت نہیں ہے۔
  • آپ کی درخواست کے لیے مختلف پائپ لائنز. کیا آپ کو کوڈ کو مقامی Minikube میں رول آؤٹ کرنے کی ضرورت ہے جب آپ ترقی کر رہے ہوں، اور پھر اسٹیج یا پروڈکشن کے لیے؟ اس مقصد کے لیے موجود ہیں۔ پروفائلز اور صارف کی ترتیب، ماحولیاتی متغیرات اور جھنڈے، جو آپ کو ایک ایپلیکیشن کے لیے مختلف پائپ لائنوں کو بیان کرنے کی اجازت دیتے ہیں۔
  • CLI. YAML میں صرف کنسول یوٹیلیٹی اور کنفیگریشنز۔ انٹرنیٹ پر آپ کو تخلیق کرنے کی کوششوں کے حوالے مل سکتے ہیں۔ تجرباتی GUIتاہم، اس وقت اس کا سب سے زیادہ امکان یہ ہے کہ کسی کو اس کی ضرورت ہے، لیکن حقیقت میں نہیں۔
  • ماڈیولریٹی. اسکافولڈ اسٹینڈ اکیلا ہارویسٹر نہیں ہے، لیکن مخصوص کاموں کے لیے انفرادی ماڈیولز یا موجودہ حل استعمال کرنے کی کوشش کرتا ہے۔

مؤخر الذکر کی مثال:

  • اسمبلی کے مرحلے میں آپ استعمال کر سکتے ہیں:
    • ڈوکر مقامی طور پر، کنیکو کا استعمال کرتے ہوئے کلسٹر میں یا گوگل کلاؤڈ بلڈ میں؛
    • مقامی طور پر بازل؛
    • Jib Maven اور Jib Gradle مقامی طور پر یا Google Cloud Build میں؛
    • کسٹم بلڈ اسکرپٹس مقامی طور پر چلتی ہیں۔ اگر آپ کو کوئی دوسرا (زیادہ لچکدار/آشنا/...) تعمیراتی حل چلانے کی ضرورت ہے، تو اسے اسکرپٹ میں بیان کیا گیا ہے تاکہ اسکافولڈ اسے لانچ کرے (دستاویزات سے مثال)۔ یہ آپ کو کوئی بھی کلکٹر استعمال کرنے کی اجازت دیتا ہے جسے اسکرپٹ کا استعمال کرتے ہوئے بلایا جا سکتا ہے۔
  • جانچ کے مرحلے میں، پہلے ہی ذکر کیا گیا ہے کنٹینر ساخت کا ٹیسٹ;
  • تعیناتی کے لیے درج ذیل فراہم کیے گئے ہیں:
    • کیوبیکٹل؛
    • ہیلم;
    • اپنی مرضی کے مطابق بنائیں

اس کی بدولت اسکافولڈ کو منفرد کہا جا سکتا ہے۔ CI/CD کی تعمیر کا فریم ورک. یہاں ایک مثال ورک فلو ہے جب اسے استعمال کرتے ہوئے (پروجیکٹ دستاویزات سے):

کبرنیٹس کی ترقی کے لیے اسکافولڈ کا جائزہ

Skaffold کا کام عام اصطلاحات میں کیسا لگتا ہے؟

  1. یوٹیلیٹی سورس کوڈ ڈائرکٹری میں تبدیلیوں پر نظر رکھتی ہے۔ اگر فائلوں میں ترمیم کی جاتی ہے، تو وہ Kubernetes کلسٹر میں ایپلیکیشن پوڈ کے ساتھ ہم آہنگ ہو جاتی ہیں۔ اگر ممکن ہو تو، تصویر کو دوبارہ جمع کیے بغیر۔ دوسری صورت میں، ایک نئی تصویر جمع کی جاتی ہے.
  2. جمع شدہ تصویر کو کنٹینر-سٹرکچر-ٹیسٹ کا استعمال کرتے ہوئے چیک کیا جاتا ہے، اسے ٹیگ کیا جاتا ہے اور ڈاکر رجسٹری کو بھیجا جاتا ہے۔
  3. اس کے بعد، تصویر کو تعینات کیا جاتا ہے - کوبرنیٹس کلسٹر میں تعینات کیا جاتا ہے۔
  4. اگر کمانڈ کا استعمال کرتے ہوئے لانچ کو شروع کیا گیا تھا۔ skaffold dev، پھر ہم ایپلیکیشن سے لاگ وصول کرنا شروع کر دیتے ہیں، اور اسکافولڈ تمام کارروائیوں کو دوبارہ دہرانے کے لیے تبدیلیوں کا انتظار کرتا ہے۔

کبرنیٹس کی ترقی کے لیے اسکافولڈ کا جائزہ
اسکافولڈ آپریشن کے اہم مراحل کی مثال

مشق کریں۔ اسکافولڈ کی کوشش کر رہا ہے۔

Skaffold کے استعمال کو ظاہر کرنے کے لیے، میں اس سے ایک مثال لوں گا۔ GitHub پروجیکٹ ریپوزٹری. ویسے، وہاں آپ کو بہت سی دوسری مثالیں مل سکتی ہیں جو مختلف تفصیلات کو مدنظر رکھتی ہیں۔ میں منی کیوب میں مقامی طور پر تمام اعمال انجام دوں گا۔ تنصیب آسان ہے اور اس میں چند منٹ لگتے ہیں، اور آپ کو شروع کرنے کے لیے kubectl کی ضرورت ہوگی۔

اسکافولڈ انسٹال کریں:

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1

آئیے ضروری مثالوں کے ساتھ اسکافولڈ کے ذخیرے کو کلون کریں:

git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices

میں نے دو پوڈز کے ساتھ ایک مثال کا انتخاب کیا، ہر ایک میں ایک چھوٹی گو ایپلی کیشن ہے۔ ایک ایپلیکیشن فرنٹ اینڈ (leeroy-web) ہے، جو درخواست کو دوسری ایپلیکیشن - بیک اینڈ (leeroy-app) پر بھیجتی ہے۔ آئیے دیکھتے ہیں کہ یہ کیسا لگتا ہے:

~/skaffold/examples/microservices # tree
.
├── leeroy-app
│   ├── app.go
│   ├── Dockerfile
│   └── kubernetes
│       └── deployment.yaml
├── leeroy-web
│   ├── Dockerfile
│   ├── kubernetes
│   │   └── deployment.yaml
│   └── web.go
├── README.adoc
└── skaffold.yaml
 
4 directories, 8 files

leeroy-app اور leeroy-web اس کوڈ کو مقامی طور پر بنانے کے لیے Go کوڈ اور سادہ Dockerfiles پر مشتمل ہے:

~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
 
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app .

میں درخواست کوڈ نہیں دوں گا - یہ جاننا کافی ہے۔ leeroy-web درخواستوں کو قبول کرتا ہے اور انہیں پراکسی کرتا ہے۔ leeroy-app. لہذا فائلوں میں Deployment.yaml صرف کے لئے ایک سروس ہے app (اندرونی روٹنگ کے لیے)۔ پوڈ پورٹ web درخواست تک فوری رسائی کے لیے ہم اسے اپنے پاس بھیج دیں گے۔

لگتا ہے skaffold.yaml:

~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
  artifacts:
    - image: leeroy-web
      context: ./leeroy-web/
    - image: leeroy-app
      context: ./leeroy-app/
deploy:
  kubectl:
    manifests:
      - ./leeroy-web/kubernetes/*
      - ./leeroy-app/kubernetes/*
portForward:
  - resourceType: deployment
    resourceName: leeroy-web
    port: 8080
    localPort: 9000

مذکورہ بالا تمام مراحل یہاں بیان کیے گئے ہیں۔ اس تشکیل کے علاوہ، عالمی ترتیبات کے ساتھ ایک فائل بھی ہے - ~/.skaffold/config. اسے دستی طور پر یا CLI کے ذریعے ایڈٹ کیا جا سکتا ہے - مثال کے طور پر، اس طرح:

skaffold config set --global local-cluster true

یہ کمانڈ عالمی متغیر کو ترتیب دے گی۔ local-cluster معنی میں true، جس کے بعد اسکافولڈ تصاویر کو ریموٹ رجسٹری میں دھکیلنے کی کوشش نہیں کرے گا۔ اگر آپ مقامی طور پر ترقی کر رہے ہیں، تو آپ اس کمانڈ کو مقامی طور پر تصاویر بنانے کے لیے استعمال کر سکتے ہیں۔

پچھلی جانب skaffold.yaml:

  • اسٹیج پر build ہم بتاتے ہیں کہ آپ کو تصویر کو مقامی طور پر جمع کرنے اور محفوظ کرنے کی ضرورت ہے۔ پہلی بار تعمیر شروع ہونے کے بعد، ہم درج ذیل دیکھیں گے:
    // т.к. Minikube создает кластер в отдельной виртуальной машине,
    // придется проникнуть внутрь, чтобы найти образы
    # minikube ssh
    $ docker images
    REPOSITORY                                TAG                                                                IMAGE ID            CREATED             SIZE 
    leeroy-app                                7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e   7d55a5080359        4 hours ago         13MB 
    leeroy-app                                v0.37.1-171-g0270a0c-dirty                                         7d55a5080359        4 hours ago         13MB
    leeroy-web                                5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681   5063bfb29d98        5 hours ago         13.1MB
    leeroy-web                                v0.37.1-171-g0270a0c-dirty                                         5063bfb29d98        5 hours ago         13.1MB

    جیسا کہ آپ دیکھ سکتے ہیں، سکافولڈ نے خود ان تصاویر کو ٹیگ کیا۔ ویسے، کئی ٹیگنگ پالیسیوں کو سپورٹ کیا جاتا ہے۔

  • مزید ترتیب میں اس کی نشاندہی کی گئی ہے۔ context: ./leeroy-app/، یعنی جس سیاق و سباق میں تصویر کو جمع کیا گیا ہے اس کی وضاحت کی گئی ہے۔
  • تعیناتی کے مرحلے پر، یہ طے ہوتا ہے کہ ہم ضروری مینی فیسٹس کے لیے kubectl اور ایک ماسک استعمال کریں گے۔
  • PortForward: اسی طرح جیسے ہم عام طور پر استعمال کرتے ہوئے بندرگاہوں کو آگے بڑھاتے ہیں۔ kubectl port-forward، ہم اسکافولڈ کو اس کمانڈ کو کال کرنے کی ہدایات دیتے ہیں۔ اس صورت میں، مقامی پورٹ 9000 کو نام کے ساتھ تعیناتی میں 8080 پر بھیج دیا جاتا ہے۔ leeroy-web.

یہ شروع کرنے کا وقت ہے skaffold dev: ٹیم ایک جاری "فیڈ بیک لوپ" بنائے گی، یعنی یہ نہ صرف ہر چیز کو جمع کرے گا اور اسے کلسٹر میں تعینات کرے گا، بلکہ آپ کو اس وقت پوڈس کی حالت کے بارے میں بھی بتائے گا، تبدیلیوں کی نگرانی کرے گا اور پھلیوں کی حالت کو اپ ڈیٹ کرے گا۔

یہاں لانچ کا نتیجہ ہے۔ skaffold dev --port-forward دوبارہ جمع کرتے وقت:

کبرنیٹس کی ترقی کے لیے اسکافولڈ کا جائزہ

سب سے پہلے، آپ دیکھ سکتے ہیں کہ کیش استعمال کیا جا رہا ہے. اگلا، ایپلیکیشن کو جمع کیا جاتا ہے، تعینات کیا جاتا ہے، اور بندرگاہوں کو آگے بڑھایا جاتا ہے۔ چونکہ بیان کیا گیا ہے۔ --port-forward، اسکافولڈ نے بندرگاہ کو آگے بڑھا دیا۔ webجیسا کہ اس سے پوچھا گیا تھا، لیکن یہاں app اس نے اپنی صوابدید پر پھینک دیا (قریب ترین مفت کا انتخاب کریں)۔ اس کے بعد، ہمیں ایپلی کیشنز سے پہلے لاگز موصول ہوتے ہیں۔

آئیے چیک کریں کہ آیا یہ کام کرتا ہے؟

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-6998dfcc95-2nxvf   1/1     Running   0          103s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!!

فائل میں ترمیم کرنا leeroy-app/app.go - چند سیکنڈ گزرے... اور:

~/skaffold/examples/microservices # kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
leeroy-app-ffd79d986-l6nwp    1/1     Running   0          11s
leeroy-web-69f7d47c9d-5ff77   1/1     Running   0          4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!!

ایک ہی وقت میں، اسکافولڈ نے خود کنسول میں وہی چیز ظاہر کی جیسا کہ ایک نقطہ کے استثناء کے ساتھ: یہ صرف رول آؤٹ ہوا leeroy-app، اور سب ایک ساتھ نہیں۔

مزید مشق

یہ بات بھی قابل ذکر ہے کہ نیا پروجیکٹ بناتے وقت، اسکافولڈ کے لیے کنفیگس کو کمانڈ کا استعمال کرتے ہوئے بوٹسٹریپ کیا جا سکتا ہے۔ init، جو بہت آسان ہے۔ اس کے علاوہ، آپ کئی کنفیگس لکھ سکتے ہیں: ڈیفالٹ کنفیگریشن پر ڈیولپمنٹ کریں، اور پھر کمانڈ کے ساتھ اسٹیج پر رول آؤٹ کریں۔ run (ایک ہی عمل کے طور پر dev، صرف تبدیلیوں کی نگرانی نہیں کرتا ہے)، ایک مختلف ترتیب کا استعمال کرتے ہوئے۔

کٹا کوڈا پر ہے۔ رہنما یہ ایک مثال کے ساتھ اور بھی آسان ہے۔ لیکن یہ Kubernetes، ایک ایپلی کیشن اور Skaffold کے ساتھ ایک ریڈی میڈ سینڈ باکس پیش کرتا ہے۔ اگر آپ خود بنیادی باتوں کو آزمانے میں دلچسپی رکھتے ہیں تو ایک بہترین آپشن۔

اسکافولڈ کے لیے استعمال کا ایک ممکنہ معاملہ ریموٹ کلسٹر پر ترقی کرنا ہے۔ ہر کوئی اپنے ہارڈ ویئر پر Minikube کو چلانے، پھر ایپلیکیشن کو رول آؤٹ کرنے اور اس کے مناسب طریقے سے کام کرنے کی توقع کرنے میں آرام سے نہیں ہوتا... اس صورت میں، Skaffold اس مسئلے کو بالکل ٹھیک کرتا ہے، جس کی تصدیق کی جا سکتی ہے، مثال کے طور پر، Reddit انجینئرز، جیسا کہ ہمارے پاس ہے۔ پہلے ہی بات چیت کی писали ہمارے بلاگ میں.

اور اندر اس اشاعت Weaveworks سے آپ کو پیداوار کے لیے پائپ لائن بنانے کی مثال مل سکتی ہے۔

حاصل يہ ہوا

Skaffold پائپ لائنوں کی تعمیر کے لیے ایک آسان ٹول ہے جس میں Kubernetes کے لیے ایپلی کیشنز کو رول آؤٹ کرنا شامل ہے اور بنیادی طور پر ترقیاتی ضروریات پر توجہ مرکوز کی جاتی ہے۔ یہ ایک "مختصر" پائپ لائن بنانا کافی آسان بناتا ہے جو ڈویلپر کی بنیادی ضروریات کو مدنظر رکھتا ہے، لیکن اگر آپ چاہیں تو، آپ بڑے عمل کو منظم کر سکتے ہیں۔ CI/CD عمل میں Skaffold استعمال کرنے کی واضح مثالوں میں سے ایک کے طور پر دیا جاتا ہے اس طرح ٹیسٹ پروجیکٹ Kubernetes، gRPC، Istio اور OpenCensus ٹریسنگ کی صلاحیتوں کا استعمال کرتے ہوئے 10 مائیکرو سروسز میں سے۔

اسکافولڈ کے پاس پہلے ہی گٹ ہب پر تقریباً 8000+ ستارے ہیں، جو گوگل نے تیار کیا ہے اور اس کا حصہ ہے گوگل کنٹینر ٹولز - عام طور پر، اس وقت اس بات پر یقین کرنے کی ہر وجہ موجود ہے کہ یہ منصوبہ خوشی سے ترقی کرے گا۔

PS

ہمارے بلاگ پر بھی پڑھیں:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں