د Kubernetes پراختیا لپاره د سکافولډ بیاکتنه

د Kubernetes پراختیا لپاره د سکافولډ بیاکتنه

یو نیم کال دمخه، د مارچ په 5، 2018، ګوګل د CI/CD په نوم د خپلې خلاصې سرچینې پروژې لومړۍ الفا نسخه خپره کړه. سکافولډ، چې موخه یې د "ساده او تکرار وړ کبرنیټ پراختیا" رامینځته کول وو ترڅو پراختیا کونکي وکولی شي د ادارې پرځای پراختیا باندې تمرکز وکړي. څه شی کیدای شي د Skaffold په اړه په زړه پورې وي؟ لکه څنګه چې دا وګرځي ، دا خپل آستین ته یو څو چلونه لري چې کولی شي دا د پراختیا کونکي لپاره یو پیاوړی وسیله رامینځته کړي ، او حتی د عملیاتو انجینر. راځئ چې د پروژې او د هغې د وړتیاوو سره اشنا شو.

NB: له بلې خوا، موږ دمخه په خپل عمومي کې د سکافولډ په اړه لنډې خبرې کړې دي د پراختیا کونکي وسیلو بیاکتنه، چې ژوند یې د کوبرنیټس سره تړلی دی.

نظریه. موخې او وړتیاوې

نو، په عمومي توګه خبرې کول، سکافولډ د CI/CD دورې اتومات کولو ستونزه حل کوي (په جوړیدو، فشار، ځای پرځای کولو مرحلو کې)، د پراختیا کونکي سمدستي فیډبیک وړاندیز کوي، د بیلګې په توګه. د راتلونکي کوډ بدلونونو پایله ګړندي ترلاسه کولو وړتیا - د یو تازه شوي غوښتنلیک په بڼه چې په کوبرنیټس کلستر کې روان دی. او دا کولی شي په مختلف سرکټونو کې کار وکړي (dev، مرحله، تولید ...)، د کوم لپاره چې سکافولډ د رول آوټ لپاره اړونده پایپ لاینونو تشریح کولو کې مرسته کوي.

د سکافولډ سرچینې کوډ په Go کې لیکل شوی، لخوا توزیع شوی د وړیا اپاچی جواز 2.0 (GitHub) لاندې.

راځئ چې اصلي دندې او ځانګړتیاوې وګورو. په لومړي کې لاندې شامل دي:

  • سکافولډ د CI/CD پایپ لاینونو جوړولو لپاره وسیلې وړاندې کوي.
  • تاسو ته اجازه درکوي په شاليد کې د سرچینې کوډ کې بدلونونه وڅارئ او د کانټینر عکسونو کې د کوډ راټولولو اتومات پروسه پرمخ وړئ ، دا عکسونه په ډاکر راجسټري کې خپاره کړئ او د کوبرنیټس کلستر ته یې ځای په ځای کړئ.
  • په ذخیره کې فایلونه په کانټینر کې د کاري لارښود سره همغږي کوي.
  • په اتوماتيک ډول د کانټینر - جوړښت - ازموینې په کارولو سره ازموینې.
  • مخ پر وړاندې بندرونه.
  • په کانټینر کې د چلونکي غوښتنلیک لاګونه لوستل.
  • په Java, Node.js, Python, Go کې لیکل شوي غوښتنلیکونو ډیبګ کولو کې مرسته کوي.

اوس د ځانګړتیاوو په اړه:

  • سکافولډ پخپله د کلستر اړخ برخې نلري. دا دی، د دې افادیت کارولو لپاره د کوبرنیټس نور تنظیم کولو ته اړتیا نشته.
  • ستاسو د غوښتنلیک لپاره مختلف پایپ لاینونه. ایا تاسو اړتیا لرئ ځایی مینیکیوب ته کوډ ورکړئ پداسې حال کې چې تاسو وده کوئ ، او بیا سټیج یا تولید ته؟ د دې هدف لپاره شتون لري پروفایلونه او د کاروونکي تشکیلات، د چاپیریال تغیرات او بیرغونه، کوم چې تاسو ته اجازه درکوي د یو غوښتنلیک لپاره مختلف پایپ لاینونه تشریح کړئ.
  • CLI. یوازې په YAML کې د کنسول افادیت او تشکیلات. په انټرنیټ کې تاسو کولی شئ د جوړولو هڅو ته مراجعه ومومئ تجربوي GUIپه هرصورت، په اوس وخت کې دا خورا احتمال یوازې د دې معنی لري چې یو څوک ورته اړتیا لري، مګر واقعا نه.
  • ماډولیت. سکافولډ یو خپلواک فصل نه دی، مګر هڅه کوي د ځانګړو دندو لپاره انفرادي ماډلونه یا موجوده حلونه وکاروي.

وروستی مثال:

  • د غونډې په مرحله کې تاسو کولی شئ وکاروئ:
    • ډاکر په محلي توګه جوړ کړئ، په کلستر کې د کانیکو په کارولو یا د ګوګل کلاوډ جوړونې کې؛
    • په محلي توګه بازل؛
    • Jib Maven او Jib Gradle په ځایی یا د ګوګل کلاوډ جوړ کې؛
    • د دودیز جوړونې سکریپټونه په محلي توګه پرمخ ځي. که تاسو اړتیا لرئ یو بل (ډیر انعطاف منونکی / پیژندل شوی / ...) جوړ کړئ حل چل کړئ ، دا په سکریپټ کې تشریح شوی ترڅو سکافولډ دا په لاره واچوي (مثال د اسنادو څخه). دا تاسو ته اجازه درکوي هر هغه راټولونکی وکاروئ چې د سکریپټ په کارولو سره ویل کیدی شي؛
  • د ازموینې په مرحله کې، مخکې ذکر شوي د کانټینر جوړښت - ازموینه;
  • د پلي کولو لپاره لاندې چمتو شوي دي:
    • کوبکټل;
    • هیلم
    • دودیز کول

د دې څخه مننه، سکافولډ یو ځانګړی بلل کیدی شي د CI/CD جوړولو لپاره چوکاټ. دلته د کار فلو مثال دی کله چې دا کاروئ (د پروژې اسنادو څخه):

د Kubernetes پراختیا لپاره د سکافولډ بیاکتنه

د سکافولډ کار په عمومي شرایطو کې څه ښکاري؟

  1. یوټیلیټ د سرچینې کوډ لارښود کې بدلونونه څاري. که په فایلونو کې تعدیلات رامینځته شي، دوی د کوبرنیټس کلستر کې د غوښتنلیک پوډ سره همغږي کیږي. که ممکنه وي، پرته له دې چې انځور بیا یوځای شي. که نه نو، یو نوی انځور راټول شوی.
  2. راټول شوی عکس د کانټینر - جوړښت - ازموینې په کارولو سره چک شوی ، ټګ شوی او د ډاکر راجسټری ته لیږل شوی.
  3. له دې وروسته، عکس له مینځه وړل شوی - د کوبرنیټس کلستر کې ځای پرځای شوی.
  4. که لانچ د کمانډ په کارولو سره پیل شوی وي skaffold dev، بیا موږ د غوښتنلیک څخه د لاګونو ترلاسه کول پیل کوو ، او سکافولډ بدلونونو ته انتظار باسي ترڅو ټولې کړنې بیا تکرار کړي.

د Kubernetes پراختیا لپاره د سکافولډ بیاکتنه
د Skaffold عملیاتو د اصلي پړاوونو انځور

تمرین. د سکافولډ هڅه کول

د سکافولډ کارولو ښودلو لپاره، زه به یو مثال واخلم د GitHub پروژې ذخیره. په هر حال، هلته تاسو کولی شئ ډیری نور مثالونه ومومئ چې مختلف مشخصات په پام کې نیسي. زه به ټولې کړنې په سیمه ایزه توګه په مینیکیوب کې ترسره کړم. نصب کول ساده دي او یو څو دقیقې وخت نیسي، او تاسو به د پیل کولو لپاره کیوبیک ته اړتیا ولرئ.

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 کوډ او ساده ډاکر فایلونه لري:

~/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/، i.e. هغه شرایط چې په کوم کې عکس راټول شوی دی مشخص شوی.
  • د ګمارنې په مرحله کې، دا ټاکل شوې چې موږ به د اړینو څرګندونو لپاره کیوبیکل او ماسک وکاروو.
  • PortForward: لکه څنګه چې موږ معمولا د بندرونو په کارولو سره فارورډ کوو kubectl port-forward، موږ سکافولډ ته لارښوونه کوو چې دې قوماندې ته زنګ ووهي. په دې حالت کې، سیمه ایز پورټ 9000 د نوم سره په ځای پرځای کولو کې 8080 ته لیږل کیږي leeroy-web.

دا د پیل کولو وخت دی skaffold dev: ټیم به یو روان "فیډبیک لوپ" رامینځته کړي، د بیلګې په توګه. نه یوازې دا به هرڅه راټول کړي او کلستر ته به یې ځای په ځای کړي ، بلکه تاسو ته به دا مهال د پوډونو حالت په اړه هم ووایی ، بدلونونه وڅاري او د پوډ حالت تازه کړي.

دلته د پیل پایله ده skaffold dev --port-forward کله چې بیا یوځای کول:

د Kubernetes پراختیا لپاره د سکافولډ بیاکتنه

لومړی، تاسو کولی شئ وګورئ چې کیچ کارول کیږي. بیا، غوښتنلیک راټول شوی، ځای پرځای شوی، او بندرونه لیږدول کیږي. له هغه وخته چې مشخص شوی --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 سره چمتو شوی سینڈ باکس وړاندې کوي. یو عالي اختیار که تاسو علاقه لرئ چې پخپله خورا اساسات هڅه وکړئ.

د سکافولډ لپاره د کارولو یوه احتمالي قضیه په لرې پرتو کلستر کې پراختیا ترسره کول دي. هرڅوک په خپل هارډویر کې د مینیکیوب چلولو لپاره راحته ندي ، بیا د غوښتنلیک رول ولوبوي او تمه لري چې دا په کافي اندازه کار وکړي ... پدې حالت کې ، سکافولډ ستونزه په بشپړ ډول حل کوي ، کوم چې تایید کیدی شي ، د مثال په توګه ، د ریډیټ انجینرانو لخوا ، لکه څنګه چې موږ لرو. دمخه بحث شوی لیکلی زموږ په بلاګ کې.

او په دا خپرونه د Weaveworks څخه تاسو کولی شئ د تولید لپاره د پایپ لاین جوړولو مثال ومومئ.

پایلې

سکافولډ د پایپ لاینونو جوړولو لپاره یوه مناسبه وسیله ده چې کوبرنیټس ته د غوښتنلیکونو رسولو کې شامل دي او په عمده ډول د پراختیا اړتیاو باندې تمرکز کوي. دا د "لنډ" پایپ لاین رامینځته کول خورا اسانه کوي چې د پراختیا کونکي لومړني اړتیاوې په پام کې نیسي ، مګر که وغواړي ، تاسو کولی شئ لوی پروسې تنظیم کړئ. د CI/CD پروسو کې د سکافولډ کارولو روښانه مثال په توګه ورکړل شوی دی داسې ازموینه پروژه د 10 مایکرو خدماتو څخه د کبرنیټس ، جی آر پی سی ، اسټیو او اوپن سینسس تعقیب ظرفیتونو څخه کار اخلي.

سکافولډ لا دمخه په GitHub کې نږدې 8000+ ستوري لري، د ګوګل لخوا رامینځته شوی او یوه برخه ده د ګوګل کانټینر اوزار - په عموم کې، دا مهال د باور کولو لپاره هر دلیل شتون لري چې پروژه به په خوښۍ سره وده وکړي.

PS

زموږ په بلاګ کې هم ولولئ:

سرچینه: www.habr.com

Add a comment