የስካፎልድ ለኩበርኔትስ ልማት አጠቃላይ እይታ

የስካፎልድ ለኩበርኔትስ ልማት አጠቃላይ እይታ

ከአንድ ዓመት ተኩል በፊት፣ በማርች 5፣ 2018፣ ጎግል የክፍት ምንጭ CI/CD ፕሮጄክቱን የመጀመሪያ የአልፋ ስሪት አወጣ። ስካፎልድአላማቸው "በኩበርኔትስ ስር ቀላል እና ሊባዛ የሚችል ልማት" መፍጠር ነበር አልሚዎች በአስተዳደር ላይ ሳይሆን በልማት ላይ እንዲያተኩሩ። ስለ Skaffold ምን አስደሳች ሊሆን ይችላል? እንደ ተለወጠ, ጥቂት ዘዴዎችን በእጁ ላይ ይዟል, ለዚህም ምስጋና ይግባውና ለገንቢው ጠንካራ መሳሪያ ሊሆን ይችላል, እና ምናልባትም የኦፕሬሽን መሐንዲስ ሊሆን ይችላል. ከፕሮጀክቱ እና ከሁኔታዎች ጋር እንተዋወቅ።

NBበነገራችን ላይ ስለ ስካፎል በጥቅሉ በአጭሩ ተናግረናል። የገንቢ መሳሪያዎች አጠቃላይ እይታ, ህይወቱ ከኩበርኔትስ ጋር የተያያዘ ነው.

ቲዎሪ. ዓላማ እና እድሎች

ስለዚህ፣ በአጠቃላይ ስካፎልድ የሲአይ/ሲዲ ዑደትን (በግንባታው፣ በመግፋት፣ በማሰማራት ደረጃዎች) በራስ-ሰር የማዘጋጀት ችግርን ይፈታል፣ ለገንቢው ፈጣን ምላሽ ይሰጣል፣ ማለትም። የሚቀጥለውን ኮድ ለውጦች በፍጥነት የማግኘት ችሎታ - በ Kubernetes ክላስተር ውስጥ በሚሰራ የተሻሻለ መተግበሪያ መልክ። እና በተለያዩ ወረዳዎች (dev, ደረጃ, ምርት ...) ውስጥ ሊሠራ ይችላል, ለዚህም ስካፎል ለመልቀቅ ተጓዳኝ የቧንቧ መስመሮችን ለመግለጽ ይረዳል.

የስካፎል ምንጭ ኮድ የተፃፈው በGo ቋንቋ ነው፣ የተሰራጨው በ በነጻ Apache ፍቃድ 2.0 (GitHub) ስር።

ዋና ዋና ተግባራትን እና ባህሪያትን አስቡባቸው. የመጀመሪያዎቹ የሚከተሉትን ያካትታሉ:

  • ስካፎል CI/CD ቧንቧዎችን ለመፍጠር መሳሪያዎችን ያቀርባል።
  • ከበስተጀርባ ባለው የምንጭ ኮድ ላይ ለውጦችን እንዲከታተሉ እና ኮድን ወደ ኮንቴነር ምስሎች በራስ ሰር የማዘጋጀት ሂደት እንዲጀምሩ፣ እነዚህን ምስሎች ወደ ዶከር መዝገብ ቤት በማተም እና ወደ ኩበርኔትስ ክላስተር በማሰማራት ሂደት እንዲጀምሩ ይፈቅድልዎታል።
  • በማጠራቀሚያው ውስጥ ያሉትን ፋይሎች በማጠራቀሚያው ውስጥ ካለው የሥራ ማውጫ ጋር ያመሳስላቸዋል።
  • በራስ-ሰር በመያዣ-መዋቅር-ሙከራ ይሞክሩ።
  • ማስተላለፊያ ወደቦች.
  • በኮንቴይነር ውስጥ የሚሰራውን የመተግበሪያ ምዝግብ ማስታወሻዎች ያነባል።
  • በJava፣ Node.js፣ Python፣ Go የተጻፉ መተግበሪያዎችን ለማረም ይረዳል።

አሁን - ስለ ባህሪያቱ:

  • ስካፎልድ እራሱ በክላስተር በኩል ምንም አካላት የሉትም።. ማለትም፣ ይህንን መገልገያ ለመጠቀም Kubernetes በተጨማሪ ማዋቀር አያስፈልግዎትም።
  • ለትግበራዎ የተለያዩ የቧንቧ መስመሮች. በማደግ ላይ እያሉ ኮዱን ለአካባቢው ሚኒኩቤ ከዚያም ወደ መድረክ ወይም ምርት መልቀቅ ያስፈልግዎታል? ለዚህም, አሉ መገለጫዎች እና የተጠቃሚ ውቅሮች, የአካባቢ ተለዋዋጮች እና ባንዲራዎች, ይህም ለአንድ መተግበሪያ የተለያዩ የቧንቧ መስመሮችን እንዲገልጹ ያስችልዎታል.
  • CLI. በ YAML ውስጥ የኮንሶል መገልገያ እና ውቅሮች ብቻ። በአውታረ መረቡ ላይ ለመፍጠር ሙከራዎች ማጣቀሻዎችን ማግኘት ይችላሉ። የሙከራ GUIአሁን ግን አንድ ሰው ያስፈልገዋል ማለት ነው, ግን በእውነቱ አይደለም.
  • ሞዱልነት. Skaffold ራሱን የቻለ ማጨጃ አይደለም፣ ነገር ግን ለተወሰኑ ተግባራት ነጠላ ሞጁሎችን ወይም አስቀድሞ ያሉትን መፍትሄዎች ለመጠቀም ይፈልጋል።

የኋለኛው ምሳሌ፡-

  • በግንባታው ደረጃ ላይ የሚከተሉትን መጠቀም ይችላሉ-
    • ዶከር በአካባቢው ይገነባል፣ kanikoን በመጠቀም ክላስተር ላይ ወይም በጎግል ክላውድ ግንባታ ላይ;
    • ባዝል በአካባቢው;
    • ጂብ ማቨን እና ጂብ ግራድል በአገር ውስጥ ወይም በጎግል ክላውድ ግንባታ;
    • ብጁ የግንባታ ስክሪፕቶች በአገር ውስጥ ይሰራሉ። ሌላ (የበለጠ ተለዋዋጭ/የሚታወቅ/…) የግንባታ መፍትሄን ማስኬድ ከፈለጉ፣ ስካፎል እንዲያሄድ በስክሪፕቱ ውስጥ ተገልጿልምሳሌ ከሰነድ). ይህ በአጠቃላይ ስክሪፕት በመጠቀም ሊጠራ የሚችል ማንኛውንም ሰብሳቢ እንድትጠቀም ይፈቅድልሃል;
  • በሙከራ ደረጃ, ቀደም ሲል የተጠቀሰው መያዣ-መዋቅር-ሙከራ;
  • ማሰማራት የሚከተሉትን ያጠቃልላል
    • ኩቤክትል;
    • Helms;
    • ማበጀት.

ለዚህም ምስጋና ይግባውና ስካፎል ልዩ ተብሎ ሊጠራ ይችላል CI / ሲዲ ለመገንባት ማዕቀፍ. ሲጠቀሙበት (ከፕሮጀክት ሰነዱ የተወሰደ) የስራ ሂደት ምሳሌ ይኸውና፡-

የስካፎልድ ለኩበርኔትስ ልማት አጠቃላይ እይታ

የ Skaffold ሥራ በጥቅሉ ሲታይ ምን ይመስላል?

  1. መገልገያው የምንጭ ኮድ ማውጫ ላይ ለውጦችን ይመለከታል። በፋይሎቹ ላይ ማሻሻያዎች ከተደረጉ፣ በ Kubernetes ክላስተር ውስጥ ካለው የመተግበሪያ ፖድ ጋር ይመሳሰላሉ። ከተቻለ, ምስሉን እንደገና ሳይገነባ. አለበለዚያ, አዲስ ምስል ተሰብስቧል.
  2. የተገነባው ምስል በመያዣ-መዋቅር-ሙከራ ተረጋግጧል፣ መለያ ተሰጥቶታል እና ለዶከር መዝገብ ቤት ገብቷል።
  3. ከዚያ በኋላ, ምስሉ ተዘርግቷል - በኩበርኔትስ ክላስተር ውስጥ ተዘርግቷል.
  4. ማስጀመሪያው በትእዛዙ ከተጀመረ skaffold dev, ከዚያ ከመተግበሪያው ምዝግብ ማስታወሻዎችን መቀበል እንጀምራለን, እና Skaffold ሁሉንም ድርጊቶች እንደገና ለመድገም ለውጦችን እየጠበቀ ነው.

የስካፎልድ ለኩበርኔትስ ልማት አጠቃላይ እይታ
የስካፎልድ ሥራ ዋና ደረጃዎች ምሳሌ

ተለማመዱ። Skaffold በመሞከር ላይ

የ Skaffold አጠቃቀምን ለማሳየት, ከ ምሳሌ እወስዳለሁ GitHub ፕሮጀክት ማከማቻ... በነገራችን ላይ, እዚያ የተለያዩ ዝርዝሮችን ከግምት ውስጥ የሚያስገባ ሌሎች ብዙ ምሳሌዎችን ማግኘት ይችላሉ። ሁሉም ድርጊቶች በሚኒኩቤ ውስጥ በአካባቢው ይከናወናሉ. መጫኑ ቀላል እና ጥቂት ደቂቃዎችን ይወስዳል፣ እና ለመጀመር 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

የ Skaffold ማከማቻውን በአስፈላጊ ምሳሌዎች እንዝጋው፡-

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

እያንዳንዳቸው አንድ ትንሽ የ Go መተግበሪያን የያዙ ሁለት ፖዶች ያሉት ምሳሌ መርጫለሁ። አንዱ አፕሊኬሽን የፊት ገፅ (ሌሮይ-ድር) ሲሆን ጥያቄውን ወደ ሁለተኛው አፕሊኬሽን ያዞራል - የኋላ (ሌሮይ-መተግበሪያ)። ምን እንደሚመስል እንመልከት፡-

~/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 ምስሎችን ወደ የርቀት መዝገብ ውስጥ 'ለመግፋት' አይሞክርም. በአገር ውስጥ እያደጉ ካሉ፣ ምስሎችን በአካባቢው ለመቆለልም ይህን ትዕዛዝ መጠቀም ይችላሉ።

ተመለስ ወደ 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, ይህን ትዕዛዝ ለመጥራት ለ Skaffold መመሪያዎችን እንሰጣለን. በዚህ ጉዳይ ላይ የአከባቢው ወደብ 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፣ ሁሉም በአንድ ጊዜ አይደለም።

ተጨማሪ ልምምድ

አዲስ ፕሮጀክት ሲፈጥሩ የ Skaffold ውቅሮች ትዕዛዙን በመጠቀም 'bootstrap' ሊደረጉ እንደሚችሉ መጥቀስ ተገቢ ነው. initበጣም ምቹ የሆነው. በተጨማሪም ፣ ብዙ አወቃቀሮችን መጻፍ ይችላሉ-በነባሪው ውቅር ላይ ማዳበር እና ከዚያ በትእዛዙ ወደ መድረክ ያውጡ። run (ከዚህ ጋር ተመሳሳይ ሂደት) dev, ለውጦቹን ብቻ አይከተልም), የተለየ ውቅር በመጠቀም.

በካታኮዳ ላይ አለ። መመሪያ በምሳሌ እንኳን ቀላል ነው። ነገር ግን ዝግጁ የሆነ ማጠሪያ ከኩበርኔትስ፣ ከመተግበሪያ እና ከስካፎል ጋር ያቀርባል። በጣም መሠረታዊ የሆኑትን እራስዎ ለመሞከር ፍላጎት ካሎት በጣም ጥሩ አማራጭ.

ለስካፎል ሊጠቅም የሚችል አንድ መያዣ በርቀት ዘለላ ላይ ልማትን መስራት ነው። ሁሉም ሰው ሚኒኩቤን በራሱ ሃርድዌር ማስኬድ፣ ከዚያም አፕሊኬሽኑን አውጥቶ በበቂ ሁኔታ እንዲሰራ መጠበቅ አይመቸውም ... በዚህ አጋጣሚ ስካፎል ተግባሩን በትክክል ይፈታል ይህም ለምሳሌ በሬዲት መሐንዲሶች ሊረጋገጥ ይችላል አስቀድመን አለን። ፃፈ በብሎጋችን.

እና ውስጥ ይህ እትም ከ Weaveworks ለማምረት የቧንቧ መስመር የመፍጠር ምሳሌን ማግኘት ይችላሉ.

መደምደሚያ

ስካፎልድ ወደ ኩበርኔትስ አፕሊኬሽኖችን መልቀቅን የሚያካትት እና በዋናነት በልማት ፍላጎቶች ላይ ያተኮረ የቧንቧ መስመሮችን ለመገንባት ምቹ መሳሪያ ነው። በእሱ አማካኝነት የገንቢውን መሰረታዊ ፍላጎቶች ከግምት ውስጥ የሚያስገባ "አጭር" የቧንቧ መስመር መፍጠር በጣም ቀላል ነው, ነገር ግን ከተፈለገ ትላልቅ ሂደቶችን ማደራጀት ይችላሉ. በ CI / ሲዲ ሂደቶች ውስጥ የ Skaffold አጠቃቀም ግልፅ ምሳሌዎች እንደ አንዱ የተሰጠው ነው እንዲህ ያለ የሙከራ ፕሮጀክት Kubernetes፣ gRPC፣ Istio እና Open Census Tracingን በመጠቀም ከ10 የማይክሮ አገልግሎቶች።

ስካፎልድ በGitHub ላይ ወደ 8000+ የሚጠጉ ኮከቦች አሉት፣ በGoogle የተገነባ እና ከፊል GoogleContainerTools - በአጠቃላይ ፣ በአሁኑ ጊዜ ፕሮጀክቱ ሁል ጊዜ በደስታ እንደሚዳብር ለማመን በቂ ምክንያት አለ ።

PS

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ