Dib u eegista Skaffold ee horumarinta Kubernetes

Dib u eegista Skaffold ee horumarinta Kubernetes

Sannad iyo badh ka hor, Maarso 5, 2018, Google ayaa soo saartay nuqulkii ugu horreeyay ee alfa ee mashruuceeda Isha Furan ee CI/CD oo la yiraahdo Skaffold, kaas oo hadafkiisu ahaa in la abuuro "horumar Kubernetes fudud oo la soo celin karo" si horumariyayaashu ay diiradda u saaraan horumarinta halkii ay maamuli lahaayeen. Maxaa xiiso leh oo ku saabsan Skaffold? Sida ay soo baxday, waxay leedahay dhowr farsamooyin oo gacanteeda ah kuwaas oo ka dhigi kara qalab awood u leh horumarinta, iyo laga yaabee xitaa injineerada hawlaha. Aan barano mashruuca iyo awoodihiisa.

NBDhanka kale, waxaan si kooban uga hadalnay guud ahaan Skaffold dib u eegista qalabka horumarinta, kuwaas oo noloshoodu ay ku xidhan tahay Kubernetes.

Aragtida. Ujeedada iyo kartida

Marka, guud ahaan marka la hadlo, Skaffold wuxuu xalliyaa dhibaatada otomatiga ah ee wareegga CI / CD (dhisidda, riixida, marxaladaha geynta), iyadoo siinaya horumariyaha jawaab celin degdeg ah, i.e. awood u leh in ay si deg deg ah u hesho natiijada code ee soo socda - qaab codsi la cusboonaysiiyay oo ku dhex socda kooxda Kubernetes. Waxayna ka shaqayn kartaa wareegyo kala duwan (dev, stage, production...), kaas oo Skaffold ay ka caawiso inay sharaxdo dhuumaha u dhigma ee duubista.

Koodhka isha Skaffold wuxuu ku qoran yahay Go, qaybiyey Hoosta shatiga Apache ee bilaashka ah 2.0 (GitHub).

Aynu eegno hawlaha iyo sifooyinka ugu muhiimsan. Kuwa ugu horreeya waxaa ka mid ah kuwan soo socda:

  • Skaffold waxa ay soo bandhigtaa agabka lagu abuurayo dhuumaha CI/CD.
  • Kuu ogolaanayaa inaad la socoto isbeddelada koodhka isha ee gadaasha oo aad socodsiiso hab toos ah oo kood ku ururinta sawirada weelka, daabacaadda sawiradan gudaha Diiwaanka Docker oo aad geynayso kooxda Kubernetes.
  • Isku-dubarid faylasha ku jira kaydka iyo hagaha shaqada ee weelka ku jira.
  • Si toos ah u tijaabi adigoo isticmaalaya weel-qaab-dhismeedka-tijaabada.
  • dekedaha hore u socda.
  • Wuxuu akhriyaa diiwaanka codsiga ku dhex socda weel.
  • Waxay ka caawisaa sixitaanka codsiyada ku qoran Java, Node.js, Python, Go.

Hadda oo ku saabsan sifooyinka:

  • Skaffold lafteedu ma laha qaybo kooxeed. Taasi waa, looma baahna in la sii habeeyo Kubernetes si loo isticmaalo utility this.
  • Dhuumaha kala duwan ee codsigaaga. Ma u baahan tahay inaad koodhka ku wareejiso Minikube maxaliga ah intaad horumarinayso, ka dibna si aad u diyaariso ama u soo saarto? Ujeedadaas awgeed waxaa jira profiles iyo habaynta isticmaalaha, doorsoomayaasha deegaanka iyo calamada, kuwaas oo kuu ogolaanaya inaad sharaxdo tubooyinka kala duwan ee hal codsi.
  • CLI. Kaliya utility console iyo habaynta gudaha YAML. Internetka waxaad ka heli kartaa tixraacyo la isku dayo in la abuuro GUI tijaabo ahSi kastaba ha ahaatee, wakhtigan xaadirka ah tani waxay u badan tahay inay macnaheedu tahay in qof u baahan yahay isaga, laakiin dhab ahaantii maaha.
  • Qaab dhismeedka. Skaffold ma aha gooye kaligiis ah, laakiin wuxuu ku dadaalaa inuu isticmaalo qaybo gaar ah ama xalalka jira ee hawlo gaar ah.

Sawirka dambe:

  • Marxaladda isu-ururinta waxaad isticmaali kartaa:
    • docker wuxuu ku dhisaa maxali ahaan, koox ku dhisan kaniko ama Google Cloud Build;
    • Bazel gudaha;
    • Jib Maven iyo Jib Gradle gudaha ama Google Cloud Build;
    • qoraalada caadadii dhisida waxay ku shaqeeyaan gudaha. Haddii aad u baahan tahay inaad waddo kale (oo aad u dabacsan / la yaqaan /...) dhista xal, waxaa lagu qeexay qoraalka si Skaffold uu u bilaabo (tusaale ka dukumentiyada). Tani waxay kuu ogolaanaysaa inaad isticmaasho ururiyaha kasta oo lagu magacaabi karo iyadoo la isticmaalayo script;
  • Marxaladda imtixaanka, horay loo sheegay weel-qaab-imtixaan;
  • Si loo geeyo waxa soo socda:
    • Kubectl;
    • Helm;
    • habayn.

Mahadsanid tan, Skaffold waxaa loogu yeeri karaa mid gaar ah qaabka dhismaha CI/CD. Waa kuwan tusaale socodka shaqada marka la isticmaalayo (laga bilaabo dukumeenti mashruuca):

Dib u eegista Skaffold ee horumarinta Kubernetes

Sidee guud ahaan shaqada Skaffold u egtahay?

  1. Utility-gu wuxuu kormeeraa isbeddelada ku yimaadda hagaha koodka isha. Haddii wax ka beddel lagu sameeyo faylalka, waxay la mid yihiin sanduuqa codsiga ee kutlada Kubernetes. Haddii ay suurtagal tahay, iyada oo aan dib la isugu keenin sawirka. Haddii kale, sawir cusub ayaa la ururiyaa.
  2. Sawirka la soo ururiyey waa la hubiyaa iyadoo la isticmaalayo weel-qaab-dhismeedka-tijaabada, calaamadeysan oo loo diraa Diiwaanka Docker.
  3. Taas ka dib, sawirka ayaa la geynayaa - waxaa la dhex geliyay kooxda Kubernetes.
  4. Haddii bilaabista la bilaabay iyadoo la isticmaalayo amarka skaffold dev, ka dib waxaan bilaabeynaa inaan ka helno diiwaannada codsiga, Skaffold wuxuu sugayaa isbeddelada si uu mar kale ugu celiyo dhammaan ficillada.

Dib u eegista Skaffold ee horumarinta Kubernetes
Sawirka marxaladaha ugu muhiimsan ee hawlgalka Skaffold

Ku celceli. Isku day Skaffold

Si loo muujiyo isticmaalka Skaffold, waxaan tusaale ka soo qaadan doonaa Kaydka mashruuca GitHub. Dhanka kale, halkaas Waxaad ka heli kartaa tusaalooyin kale oo badan oo ku xisaabtama waxyaabo kala duwan. Waxaan ku fulin doonaa dhammaan ficillada gudaha Minikube. Rakibadu waa sahlan tahay waxayna qaadataa dhowr daqiiqo, waxaadna u baahan doontaa kubectl si aad u bilowdo.

Ku rakib 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

Aynu ku xidhno kaydka Skaffold tusaalooyinka lagama maarmaanka ah:

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

Waxaan doortay tusaale leh laba gadhood oo mid walba ka kooban hal codsi oo yar oo Go ah. Mid ka mid ah arji waa xaga hore (leeroy-web), kaas oo u jiheeya codsiga codsiga labaad - dhabarka (leeroy-app). Aan aragno sida ay u egtahay:

~/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 iyo leeroy-web waxay ka kooban yihiin Go code iyo Dockerfiles fudud oo koodkan lagu dhisayo gudaha:

~/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 .

Ma siin doono koodka codsiga - waa ku filan tahay in la ogaado leeroy-web aqbala codsiyada oo u wakiila leeroy-app. Sidaa darteed in faylasha Deployment.yaml waxaa jira adeeg kaliya app (marin gudaha ah). Dekadda boodhka web waanu u gudbin doonaa nafteena si aan degdeg ugu helno codsiga.

Waxay u muuqataa sida 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

Dhammaan heerarka kor ku xusan ayaa halkan lagu sharaxay. Marka lagu daro qaabayntan, waxa kale oo jira fayl leh goobo caalami ah - ~/.skaffold/config. Waxaa lagu daabaci karaa gacanta ama iyadoo la sii marinayo CLI - tusaale ahaan, sidan oo kale:

skaffold config set --global local-cluster true

Amarkani wuxuu dejin doonaa doorsoomayaasha caalamiga ah local-cluster macno ahaan true, ka dib Skaffold iskuma dayi doono inuu sawirada ku riixo diiwaanka fog. Haddii aad horumar ku samaynayso gudaha, waxaad isticmaali kartaa amarkan si aad u dhisto sawirada gudaha.

Ku noqo skaffold.yaml:

  • Masraxa build waxaan cadeyneynaa inaad u baahan tahay inaad aruuriso oo aad keydiso sawirka gudaha. Ka dib markii dhismuhu socdo markii ugu horeysay, waxaan arki doonaa kuwan soo socda:
    // т.к. 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

    Sida aad arki karto, Skaffold wuxuu calaamadeeyay sawirada laftiisa. Jid ahaan, dhowr siyaasadood oo calaamadaynta ayaa la taageeray.

  • Dheeraad ah ee qaabeynta ayaa lagu tilmaamay context: ./leeroy-app/, i.e. macnaha guud ee sawirka lagu soo ururiyay ayaa la cayimay.
  • Marxaladda dirista, waxaa la go'aamiyay inaan isticmaali doono kubectl iyo maaskaro muujinta lagama maarmaanka ah.
  • PortForward: oo la mid ah sida aan inta badan u gudbinno dekedaha isticmaalaya kubectl port-forward, waxaanu siinaa tilmaamo Skaffold si uu u waco amarkan. Xaaladdan oo kale, dekedda maxalliga ah 9000 waxaa loo gudbiyaa 8080 ee Deployment oo leh magaca leeroy-web.

Waa waqtigii la bilaabi lahaa skaffold devKooxda ayaa abuuri doonta "loop jawaab celin" socota, i.e. ma aha oo kaliya in ay ururin doonto wax kasta oo ay geyn doonto kooxda, laakiin sidoo kale waxay kuu sheegi doontaa xaaladda boodhka ee wakhtigan, la socoshada isbeddelada iyo cusbooneysiinta xaaladda boodhka.

Waa kan natiijada furitaanka skaffold dev --port-forward marka dib la isugu keeno:

Dib u eegista Skaffold ee horumarinta Kubernetes

Marka hore, waxaad arki kartaa in kaydka la isticmaalayo. Marka xigta, codsiga waa la ururiyaa, la geeyaa, oo dekedo waa la soo gudbiyaa. Tan iyo markii la cayimay --port-forward, Skaffold wuxuu u sii gudbiyay dekedii web, sida la weydiiyay, laakiin halkan app wuxuu ku tuuray go'aankiisa (doortay midka ugu dhow ee xorta ah). Taas ka dib, waxaan ka helnaa diiwaanka ugu horreeya codsiyada.

Aynu eegno inay shaqaynayso?

~/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!!!

Wax ka beddelka faylka leeroy-app/app.go - dhowr ilbiriqsi ayaa dhaaftay...iyo:

~/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!!!

Isla mar ahaantaana, Skaffold lafteedu waxay ku soo bandhigtay wax la mid ah console-ka sidii hore, marka laga reebo hal dhibic: kaliya ayaa soo baxday. leeroy-app, oo ma aha dhammaan hal mar.

Dhaqan badan

Waxa kale oo xusid mudan in marka la abuurayo mashruuc cusub, habaynta Skaffold lagu dhejin karo iyada oo la adeegsanayo amarka init, taas oo ah mid aad u habboon. Intaa waxaa dheer, waxaad qori kartaa dhowr qaabeyn: ku samee horumarinta qaabka caadiga ah, ka dibna u gudub marxaladda amarka run (Hannaan la mid ah sida dev, kaliya ma kormeero isbeddelada), adoo isticmaalaya qaab kale.

On katacoda waxaa jira hage Xitaa way fududahay tusaale ahaan. Laakin waxay bixisaa sanduuq ciid diyaarsan oo leh Kubernetes, codsi iyo Skaffold. Doorasho weyn haddii aad xiisaynayso inaad naftaada tijaabiso waxyaabaha aasaasiga ah.

Hal kiis oo suurtagal ah oo loo isticmaali karo Skaffold waa in lagu sameeyo horumarinta koox fog. Qof kastaa kuma qanacsana in uu Minikube ku shaqeeyo qalabkiisa, ka dibna soo rogo codsiga oo uu filayo inuu si ku filan u shaqeeyo ... Xaaladdan oo kale, Skaffold waxay xallisaa dhibaatada si fiican, taas oo lagu xaqiijin karo, tusaale ahaan, injineerada Reddit, sida aan haysano. horaa looga hadlay qoray in our blog.

Iyo in daabacaadan laga bilaabo Weaveworks waxaad ka heli kartaa tusaale ahaan abuurista dhuumaha wax soo saarka.

gunaanad

Skaffold waa qalab ku haboon in lagu dhiso dhuumaha kuwaas oo ku lug leh gudbinta codsiyada Kubernetes oo inta badan diirada saaraya baahiyaha horumarinta. Waxay ka dhigaysa mid aad u fudud in la abuuro dhuumo "gaaban" oo tixgelinaya baahiyaha aasaasiga ah ee horumariyaha, laakiin haddii la rabo, waxaad abaabuli kartaa habab waaweyn. Sida mid ka mid ah tusaalooyinka cad ee isticmaalka Skaffold ee hababka CI/CD waa la siiyay sida mashruuca tijaabada ee 10 adeeg-yar oo isticmaalaya awoodaha Kubernetes, gRPC, Istio iyo Raadinta Tirakoobka Furan.

Skaffold waxay horey ugu lahayd ku dhawaad ​​8000+ xiddigood oo ku yaal GitHub, waxaa sameeyay Google oo qayb ka ah GoogleContainerTools - guud ahaan, wakhtigan xaadirka ah waxaa jirta sabab kasta oo lagu aamino in mashruucu si farxad leh u horumari doono ka dib.

PS

Sidoo kale ka akhri boggayaga:

Source: www.habr.com

Add a comment