ڪبرنيٽس ڊولپمينٽ لاءِ اسڪافولڊ جو جائزو

ڪبرنيٽس ڊولپمينٽ لاءِ اسڪافولڊ جو جائزو

ڏيڍ سال اڳ، 5 مارچ 2018 تي، گوگل CI/CD لاءِ پنهنجي اوپن سورس پروجيڪٽ جو پهريون الفا ورزن جاري ڪيو. اسڪافولڊ، جنهن جو مقصد ”سادو ۽ ٻيهر قابل ڪبرنيٽس ڊولپمينٽ“ ٺاهڻ هو ته جيئن ڊولپرز انتظاميه بدران ترقي تي ڌيان ڏئي سگهن. Skaffold بابت ڇا دلچسپ ٿي سگهي ٿو؟ جيئن ته اهو نڪتو، ان ۾ ڪجهه چالون آهن ان جي آستين تي جيڪي ان کي ڊولپر لاء هڪ طاقتور اوزار ٺاهي سگهن ٿا، ۽ شايد شايد آپريشن انجنيئر پڻ. اچو ته پروجيڪٽ ۽ ان جي صلاحيتن سان واقف ٿي وڃو.

NB: رستي ۾، اسان اڳ ۾ ئي اسان جي جنرل ۾ Skaffold جي باري ۾ مختصر ڳالهه ٻولهه ڪئي آهي ڊولپر اوزار جو جائزو، جن جون زندگيون ڪبرنيٽس سان ڳنڍيل آهن.

نظريو. مقصد ۽ صلاحيتون

تنهن ڪري، عام طور تي ڳالهائڻ، Skaffold CI / CD چڪر کي خودڪار ڪرڻ جو مسئلو حل ڪري ٿو (تعمير، ڌڪ، ٺهڪندڙ مرحلن تي)، ڊولپر کي فوري موٽ پيش ڪندي، يعني. بعد ۾ ڪوڊ تبديلين جو نتيجو جلدي حاصل ڪرڻ جي صلاحيت - ڪبرنيٽس ڪلستر ۾ هلندڙ هڪ اپڊيٽ ٿيل ايپليڪيشن جي صورت ۾. ۽ اهو مختلف سرڪٽس ۾ ڪم ڪري سگهي ٿو (ديو، اسٽيج، پيداوار ...)، جنهن لاء اسڪافولڊ رول آئوٽ لاء لاڳاپيل پائپ لائنن کي بيان ڪرڻ ۾ مدد ڪري ٿي.

Skaffold جو سورس ڪوڊ Go ۾ لکيل آهي، طرفان ورهايل مفت Apache لائسنس 2.0 (GitHub) جي شرطن جي تحت.

اچو ته مکيه ڪمن ۽ خاصيتن تي نظر رکون. پهرين ۾ هيٺيان شامل آهن:

  • Skaffold CI/CD پائپ لائنز ٺاهڻ لاءِ اوزار پيش ڪري ٿو.
  • توهان کي پس منظر ۾ سورس ڪوڊ ۾ تبديلين جي نگراني ڪرڻ جي اجازت ڏئي ٿي ۽ ڪنٽينر تصويرن ۾ ڪوڊ گڏ ڪرڻ جي هڪ خودڪار عمل کي هلائڻ، انهن تصويرن کي ڊاڪر رجسٽري ۾ شايع ڪرڻ ۽ انهن کي ڪبرنيٽس ڪلستر تي ترتيب ڏيڻ جي اجازت ڏئي ٿي.
  • ڪنٽينر ۾ ڪم ڪندڙ ڊاريڪٽري سان مخزن ۾ فائلن کي هم وقت سازي ڪري ٿو.
  • ڪنٽينر-ڍانچي-ٽيسٽ استعمال ڪندي خودڪار طور تي ٽيسٽ.
  • بندرگاهن کي اڳتي وڌايو.
  • ڪنٽينر ۾ هلندڙ ايپليڪيشن جا لاگ پڙهي ٿو.
  • Java, Node.js, Python, Go ۾ لکيل ايپليڪيشنن کي ڊيبگ ڪرڻ ۾ مدد ڪري ٿي.

هاڻي خاصيتن جي باري ۾:

  • Skaffold پاڻ وٽ ڪو به ڪلستر-سائيڊ اجزاء ناهي. اهو آهي، هن افاديت کي استعمال ڪرڻ لاء ڪبرنيٽس کي وڌيڪ ترتيب ڏيڻ جي ڪا ضرورت ناهي.
  • توهان جي اپليڪيشن لاء مختلف پائپ لائنون. ڇا توهان کي ڪوڊ رول آئوٽ ڪرڻ جي ضرورت آهي مقامي Minikube ڏانهن جڏهن توهان ترقي ڪري رهيا آهيو، ۽ پوءِ اسٽيج يا پيداوار لاءِ؟ هن مقصد لاء موجود آهن پروفائلز ۽ صارف جي ترتيب، ماحولياتي متغير ۽ جھنڊا، جيڪي توھان کي ھڪڙي ايپليڪيشن لاء مختلف پائپ لائنون بيان ڪرڻ جي اجازت ڏين ٿيون.
  • CLI. YAML ۾ صرف ڪنسول افاديت ۽ ترتيب. انٽرنيٽ تي توهان کي پيدا ڪرڻ جي ڪوششن جا حوالا ڳولي سگهو ٿا تجرباتي GUIجڏهن ته، هن وقت گهڻو ڪري هن جو مطلب اهو آهي ته ڪنهن کي هن جي ضرورت آهي، پر حقيقت ۾ نه.
  • مودالي. اسڪافولڊ هڪ اسٽينڊل هارويسٽر نه آهي، پر خاص ڪمن لاءِ انفرادي ماڊل يا موجوده حل استعمال ڪرڻ جي ڪوشش ڪندو آهي.

آخري جو مثال:

  • اسيمبلي اسٽيج تي توهان استعمال ڪري سگهو ٿا:
    • ڊاڪر مقامي طور تي تعمير ڪريو، ڪلستر ۾ ڪنيڪو استعمال ڪندي يا گوگل ڪلائوڊ بلڊ ۾؛
    • مقامي طور تي بيزل؛
    • Jib Maven ۽ Jib Gradle مقامي طور تي يا گوگل ڪلائوڊ بلڊ ۾؛
    • ڪسٽم بلڊ اسڪرپٽ مقامي طور تي هلن ٿيون. جيڪڏهن توهان کي ڪنهن ٻئي (وڌيڪ لچڪدار/واقف/...) تعمير حل هلائڻ جي ضرورت آهي، اهو اسڪرپٽ ۾ بيان ڪيو ويو آهي ته جيئن اسڪافولڊ ان کي لانچ ڪري (دستاويز مان مثال). هي توهان کي ڪنهن به ڪليڪٽر کي استعمال ڪرڻ جي اجازت ڏئي ٿو جنهن کي اسڪرپٽ استعمال ڪندي سڏيو وڃي ٿو.
  • ٽيسٽ اسٽيج تي، اڳ ۾ ئي ذڪر ڪيو ويو آهي ڪنٽينر-ڍانچي-امتحان;
  • مقرري لاءِ ھيٺ ڏنل آھن:
    • ڪبيڪٽل؛
    • هيلم؛
    • ترتيب ڏيڻ.

هن جي مهرباني، Skaffold هڪ منفرد سڏيو ڪري سگهجي ٿو CI/CD تعمير ڪرڻ لاء فريم ورڪ. هتي هڪ مثال ڪم فلو آهي جڏهن ان کي استعمال ڪندي (پروجيڪٽ جي دستاويزن مان):

ڪبرنيٽس ڊولپمينٽ لاءِ اسڪافولڊ جو جائزو

Skaffold جي ڪم کي عام اصطلاحن ۾ ڇا نظر اچي ٿو؟

  1. يوٽيليٽي مانيٽر ڪري ٿو تبديلين کي ماخذ ڪوڊ ڊاريڪٽري ۾. جيڪڏهن تبديليون فائلن ۾ ڪيون وينديون آهن، اهي ڪبرنيٽس ڪلستر ۾ ايپليڪيشن پوڊ سان هم وقت سازي ٿينديون آهن. جيڪڏهن ممڪن هجي، تصوير کي ٻيهر گڏ ڪرڻ کان سواء. ٻي صورت ۾، هڪ نئين تصوير گڏ ڪئي وئي آهي.
  2. گڏ ڪيل تصوير کي چڪاس ڪيو ويو آهي ڪنٽينر-اسٽرڪچر-ٽيسٽ استعمال ڪندي، ٽيگ ڪيو ويو ۽ ڊاڪر رجسٽري ڏانهن موڪليو ويو.
  3. ان کان پوء، تصوير لڳايو ويو آهي - ڪبرنيٽس ڪلستر ۾ مقرر ڪيو ويو آهي.
  4. جيڪڏهن لانچ شروع ڪيو ويو حڪم استعمال ڪندي skaffold dev، پوءِ اسان اپليڪيشن مان لاگز حاصل ڪرڻ شروع ڪندا آهيون، ۽ اسڪافولڊ سڀني عملن کي ٻيهر ورجائڻ لاءِ تبديلين جو انتظار ڪري ٿو.

ڪبرنيٽس ڊولپمينٽ لاءِ اسڪافولڊ جو جائزو
Skaffold آپريشن جي مکيه مرحلن جو مثال

مشق. ڪوشش ڪري رهيو آهي Skaffold

Skaffold جي استعمال کي ظاهر ڪرڻ لاء، مان هڪ مثال وٺندس GitHub پروجيڪٽ مخزن. ايئن ته، اتي توھان ڪيترائي ٻيا مثال ڳولي سگھو ٿا جيڪي مختلف وضاحتن کي مدنظر رکن ٿا. مان سڀ عمل مقامي طور تي Minikube ۾ انجام ڏيندس. انسٽاليشن سادو آهي ۽ ڪجهه منٽ لڳن ٿا، ۽ توهان کي شروع ڪرڻ لاءِ kubectl جي ضرورت پوندي.

Skaffold انسٽال ڪريو:

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

مون ھڪڙو مثال چونڊيو ٻن پوڊن سان، ھر ھڪ ۾ ھڪڙو ننڍڙو گو ايپليڪيشن آھي. ھڪڙي ايپليڪيشن فرنٽ اينڊ (ليروائي-ويب) آھي، جيڪا درخواست کي ٻي ايپليڪيشن ڏانھن موڪلي ٿي - پس منظر (ليرو-ايپ). اچو ته ڏسو ته اهو ڇا ٿو لڳي:

~/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 تصويرن کي ريموٽ رجسٽري ڏانهن ڌڪڻ جي ڪوشش نه ڪندو. جيڪڏهن توهان مقامي طور تي ترقي ڪري رهيا آهيو، توهان استعمال ڪري سگهو ٿا هي حڪم مقامي طور تي تصويرون ٺاهڻ لاءِ.

جي طرف واپس 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

    جئين توهان ڏسي سگهو ٿا، Skaffold تصويرون پاڻ کي ٽيگ ڪيو. رستي ۾، ڪيترن ئي ٽيگنگ پاليسين جي حمايت ڪئي وئي آهي.

  • وڌيڪ ترتيب ۾ اهو اشارو ڪيو ويو آهي context: ./leeroy-app/، i.e. جنهن حوالي سان تصوير گڏ ڪئي وئي آهي بيان ڪيل آهي.
  • مقرري واري مرحلي ۾، اهو طئي ڪيو ويو آهي ته اسان ڪبيڪٽل ۽ هڪ ماسڪ استعمال ڪنداسين ضروري ظاهر ڪرڻ لاء.
  • PortForwardجيئن ته اسان عام طور تي بندرگاهن کي استعمال ڪندي اڳتي وڌون ٿا kubectl port-forward، اسان Skaffold کي هدايتون ڏيون ٿا ھن حڪم کي سڏڻ لاءِ. انهي صورت ۾، مقامي بندرگاهن 9000 کي 8080 جي نالي سان ترتيب ڏيڻ ۾ موڪليو ويو آهي. leeroy-web.

اهو شروع ڪرڻ جو وقت آهي skaffold dev: ٽيم ٺاهي ويندي هڪ جاري "فيڊبڪ لوپ"، يعني. نه رڳو اهو سڀ ڪجهه گڏ ڪندو ۽ ان کي ڪلستر ۾ ترتيب ڏيندو، پر توهان کي هن وقت پوڊس جي حالت بابت پڻ ٻڌائيندو، تبديلين جي نگراني ڪندو ۽ پوڊ جي حالت کي اپڊيٽ ڪندو.

هتي لانچ جو نتيجو آهي skaffold dev --port-forward جڏهن ٻيهر گڏ ڪرڻ:

ڪبرنيٽس ڊولپمينٽ لاءِ اسڪافولڊ جو جائزو

پهرين، توهان ڏسي سگهو ٿا ته ڪيش استعمال ڪيو پيو وڃي. اڳيون، ايپليڪيشن گڏ ڪئي وئي، ترتيب ڏني وئي، ۽ بندرگاهن کي اڳتي وڌايو ويو. جڏهن کان بيان ڪيو ويو آهي --port-forward، Skaffold بندرگاهه ڏانهن اڳتي وڌايو 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، ۽ نه سڀ هڪ ڀيرو.

وڌيڪ مشق

اهو پڻ قابل ذڪر آهي ته جڏهن هڪ نئين پروجيڪٽ ٺاهي، Skaffold لاء configs کي استعمال ڪندي بوٽ اسٽريپ ڪري سگهجي ٿو. init، جيڪو تمام آسان آهي. ان کان علاوه، توھان لکي سگھوٿا ڪيترائي ترتيب: ڊفالٽ ترتيب تي ترقي ڪريو، ۽ پوءِ ڪمانڊ سان اسٽيج ڏانھن رول آئوٽ ڪريو run (ساڳي عمل dev، صرف تبديلين جي نگراني نٿو ڪري)، هڪ مختلف ترتيب استعمال ڪندي.

ڪيٽاڪوڊا تي آهي رهنمائي ڪندڙ اهو هڪ مثال سان اڃا به آسان آهي. پر اهو پيش ڪري ٿو تيار ٿيل سينڊ باڪس ڪبرنيٽس، هڪ ايپليڪيشن ۽ اسڪافولڊ سان. هڪ بهترين اختيار جيڪڏهن توهان دلچسپي رکو ٿا ته تمام بنيادي شيون پاڻ کي ڪوشش ڪرڻ ۾.

Skaffold لاءِ هڪ ممڪن استعمال وارو ڪيس ريموٽ ڪلسٽر تي ترقي ڪرڻ آهي. هرڪو پنهنجي هارڊويئر تي Minikube هلائڻ ۾ آسان ناهي، پوءِ ايپليڪيشن کي رول آئوٽ ڪرڻ ۽ ان کي مناسب طريقي سان ڪم ڪرڻ جي اميد رکي ٿو... انهي صورت ۾، اسڪافولڊ اهو مسئلو مڪمل طور تي حل ڪري ٿو، جنهن جي تصديق ٿي سگهي ٿي، مثال طور، Reddit انجنيئرز، جيئن اسان وٽ آهي. اڳ ۾ ئي بحث ڪيو ويو آهي لکيو اسان جي بلاگ ۾.

۽ اندر هن اشاعت Weaveworks مان توھان ڳولي سگھوٿا ھڪڙو مثال پيدا ڪرڻ لاءِ پائيپ لائين ٺاهڻ جو.

ٿڪل

اسڪافولڊ پائپ لائنز جي تعمير لاءِ هڪ آسان اوزار آهي جنهن ۾ ڪبرنيٽس تائين ايپليڪيشنن کي رولنگ ڪرڻ شامل آهي ۽ بنيادي طور تي ترقي جي ضرورتن تي مرکوز آهي. اهو "ننڍي" پائپ لائن ٺاهڻ ۾ ڪافي آسان بڻائي ٿو جيڪا ڊولپر جي بنيادي ضرورتن کي مدنظر رکي ٿي، پر جيڪڏهن گهربل هجي، توهان وڏي عمل کي منظم ڪري سگهو ٿا. جيئن CI/CD عملن ۾ Skaffold استعمال ڪرڻ جا واضح مثال ڏنو ويو آهي جيئن ته هڪ ٽيسٽ پروجيڪٽ Kubernetes، gRPC، Istio ۽ OpenCensus Tracing جي صلاحيتن کي استعمال ڪندي 10 مائڪرو سروسز مان.

Skaffold اڳ ۾ ئي GitHub تي لڳ ڀڳ 8000+ ستارا آهن، گوگل پاران ٺاهيل آهي ۽ ان جو حصو آهي گوگل ڪنٽينر ٽولز - عام طور تي، هن وقت يقين ڪرڻ جو هر سبب آهي ته پروجيڪٽ ڪڏهن به خوشيء سان ترقي ڪندو.

پي ايس

اسان جي بلاگ تي پڻ پڙهو:

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

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