Kev tshuaj xyuas ntawm Skaffold rau Kubernetes kev txhim kho

Kev tshuaj xyuas ntawm Skaffold rau Kubernetes kev txhim kho

Ib xyoos thiab ib nrab dhau los, thaum Lub Peb Hlis 5, 2018, Google tso tawm thawj alpha version ntawm nws qhov Open Source project rau CI / CD hu ua Skaffold, nws lub hom phiaj yog los tsim "kev txhim kho Kubernetes yooj yim thiab rov ua dua" kom cov neeg tsim khoom tuaj yeem tsom mus rau kev txhim kho ntau dua li kev tswj hwm. Dab tsi yuav nthuav txog Skaffold? Raws li nws hloov tawm, nws muaj ob peb lub tswv yim ntawm nws lub tes tsho uas tuaj yeem ua rau nws muaj zog rau tus tsim tawm, thiab tej zaum txawm tias tus kws ua haujlwm ua haujlwm. Cia peb paub txog qhov project thiab nws cov peev xwm.

NB: Los ntawm txoj kev, peb twb tau tham luv luv txog Skaffold hauv peb qhov dav dav tshuaj xyuas cov cuab yeej tsim tawm, nws lub neej txuas nrog Kubernetes.

Kev xav. Lub hom phiaj thiab muaj peev xwm

Yog li, feem ntau hais lus, Skaffold daws qhov teeb meem ntawm kev siv lub voj voog CI / CD (ntawm kev tsim, thawb, xa mus rau theem), muab cov lus qhia tawm tswv yim, piv txwv li. muaj peev xwm sai sai tau txais cov txiaj ntsig ntawm kev hloov pauv tom ntej - hauv daim ntawv thov hloov tshiab uas khiav hauv Kubernetes pawg. Thiab nws tuaj yeem ua haujlwm hauv ntau qhov sib txawv (dev, theem, ntau lawm ...), uas Skaffold pab piav qhia txog cov kav dej sib txuas rau kev nthuav tawm.

Skaffold lub hauv paus code yog sau rau hauv Go, faib los ntawm raws li Apache Daim Ntawv Tso Cai Dawb 2.0 (GitHub).

Cia peb saib cov haujlwm tseem ceeb thiab cov yam ntxwv. Thawj muaj xws li hauv qab no:

  • Skaffold muaj cov cuab yeej los tsim CI / CD pipelines.
  • Tso cai rau koj los saib xyuas cov kev hloov pauv hauv cov cai hauv keeb kwm yav dhau thiab khiav cov txheej txheem kev sib sau ua ke rau hauv cov duab ntim, tshaj tawm cov duab no hauv Docker Registry thiab xa mus rau Kubernetes pawg.
  • Synchronizes cov ntaub ntawv nyob rau hauv lub repository nrog rau cov chaw ua hauj lwm directory nyob rau hauv lub thawv.
  • Automatically tests siv lub thawv-structure-test.
  • Forwards ports.
  • Nyeem cov cav ntawm ib daim ntawv thov khiav hauv ib lub thawv.
  • Pab hauv kev debugging daim ntawv sau npe hauv Java, Node.js, Python, Go.

Tam sim no hais txog cov yam ntxwv:

  • Skaffold nws tus kheej tsis muaj pawg-sab pawg. Ntawd yog, tsis tas yuav teeb tsa Kubernetes ntxiv los siv cov khoom siv no.
  • Cov kav dej sib txawv rau koj daim ntawv thov. Koj puas yuav tsum tau dov tawm cov cai rau Minikube hauv zos thaum koj tab tom tsim, thiab tom qab ntawd mus rau theem lossis ntau lawm? Rau lub hom phiaj no muaj cov ntaub ntawv thiab cov neeg siv kev teeb tsa, ib puag ncig hloov pauv thiab cov chij, uas tso cai rau koj piav qhia txog cov kav dej sib txawv rau ib daim ntawv thov.
  • CLI. Tsuas yog kev siv hluav taws xob thiab kev teeb tsa hauv YAML nkaus xwb. Hauv Is Taws Nem koj tuaj yeem nrhiav cov lus qhia rau kev sim tsim kev sim GUITxawm li cas los xij, lub sijhawm no feem ntau tsuas yog txhais tau hais tias ib tus neeg xav tau nws, tab sis tsis yog tiag tiag.
  • Qauv. Skaffold tsis yog tus kws sau qoob loo ib leeg, tab sis siv zog siv tus kheej cov qauv lossis cov kev daws teeb meem uas twb muaj lawm rau cov haujlwm tshwj xeeb.

Piv txwv ntawm tom kawg:

  • Nyob rau theem sib dhos koj tuaj yeem siv:
    • docker tsim hauv zos, hauv pawg siv kaniko lossis hauv Google Cloud Tsim;
    • Bazel hauv zos;
    • Jib Maven thiab Jib Gradle hauv zos lossis hauv Google Huab Tsim;
    • kev cai tsim scripts khiav hauv zos. Yog tias koj xav tau khiav lwm qhov (ntau dua / paub meej / ...) tsim kev daws teeb meem, nws tau piav qhia hauv tsab ntawv kom Skaffold tso nws (piv txwv los ntawm cov ntaub ntawv). Qhov no tso cai rau koj siv txhua tus neeg sau uas tuaj yeem hu tau siv tsab ntawv;
  • Nyob rau theem kev sim, qhov twb hais lawm container-structure-test;
  • Rau kev xa tawm cov hauv qab no tau muab:
    • Kubectl;
    • Helm;
    • kho.

Ua tsaug rau qhov no, Skaffold tuaj yeem hu ua qhov tshwj xeeb lub hauv paus rau kev tsim CI/CD. Nov yog ib qho piv txwv ntawm kev ua haujlwm thaum siv nws (los ntawm cov ntaub ntawv ua haujlwm):

Kev tshuaj xyuas ntawm Skaffold rau Kubernetes kev txhim kho

Skaffold txoj haujlwm zoo li cas hauv cov ntsiab lus dav dav?

  1. Lub tshuab hluav taws xob saib xyuas cov kev hloov pauv hauv cov npe ntawm qhov chaws. Yog tias hloov kho rau cov ntaub ntawv, lawv tau synchronized nrog daim ntawv thov pod hauv Kubernetes pawg. Yog tias ua tau, tsis tas yuav rov ua cov duab. Txwv tsis pub, ib daim duab tshiab tau sib sau ua ke.
  2. Cov duab sib sau ua ke raug kuaj xyuas siv lub thawv-cov qauv-kuaj, tagged thiab xa mus rau Docker Registry.
  3. Tom qab no, daim duab raug xa mus - xa mus rau hauv Kubernetes pawg.
  4. Yog tias lub community launch tau pib siv cov lus txib skaffold dev, tom qab ntawd peb pib txais cov ntawv teev npe los ntawm daim ntawv thov, thiab Skaffold tos qhov kev hloov pauv kom rov ua txhua qhov kev ua dua.

Kev tshuaj xyuas ntawm Skaffold rau Kubernetes kev txhim kho
Piv txwv ntawm cov theem tseem ceeb ntawm kev ua haujlwm Skaffold

Xyaum. Sim Skaffold

Txhawm rau ua kom pom kev siv Skaffold, Kuv yuav ua piv txwv los ntawm GitHub qhov project repository... Los ntawm txoj kev, nyob ntawd Koj tuaj yeem pom ntau yam piv txwv uas coj mus rau hauv tus account ntau yam tshwj xeeb. Kuv yuav ua txhua yam hauv zos hauv Minikube. Kev teeb tsa yooj yim thiab siv sijhawm ob peb feeb, thiab koj yuav xav tau kubectl pib.

Nruab 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

Cia peb clone Skaffold lub chaw cia khoom nrog cov piv txwv tsim nyog:

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

Kuv xaiv ib qho piv txwv nrog ob lub pods, txhua qhov muaj ib daim ntawv thov Go me. Ib daim ntawv thov yog frontend (leeroy-web), uas redirects qhov kev thov mus rau ob daim ntawv thov - lub backend (leeroy-app). Cia peb saib seb nws zoo li cas:

~/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 thiab leeroy-web muaj Go code thiab Dockerfiles yooj yim rau kev tsim cov cai hauv zos:

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

Kuv yuav tsis muab daim ntawv thov code - nws txaus kom paub qhov ntawd leeroy-web lees txais kev thov thiab tso npe rau lawv leeroy-app. Yog li ntawd nyob rau hauv cov ntaub ntawv Deployment.yaml muaj Service xwb app (rau kev siv sab hauv). Pod chaw nres nkoj web peb yuav xa nws mus rau peb tus kheej kom nkag tau sai rau daim ntawv thov.

Nws zoo li cas 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

Tag nrho cov theem uas tau hais los saum toj no tau piav qhia ntawm no. Ntxiv rau qhov kev teeb tsa no, kuj tseem muaj cov ntaub ntawv nrog lub ntiaj teb teeb tsa - ~/.skaffold/config. Nws tuaj yeem hloov kho manually lossis ntawm CLI - piv txwv li, zoo li no:

skaffold config set --global local-cluster true

Cov lus txib no yuav teeb tsa lub ntiaj teb hloov pauv local-cluster rau hauv lub ntsiab lus true, tom qab ntawd Skaffold yuav tsis sim thawb cov duab mus rau cov chaw taws teeb npe. Yog tias koj tab tom txhim kho hauv zos, koj tuaj yeem siv cov lus txib no los tsim cov duab hauv zos.

Rov qab mus skaffold.yaml:

  • Nyob rau theem build peb qhia meej tias koj yuav tsum sau thiab khaws cov duab hauv zos. Tom qab kev tsim ua thawj zaug, peb yuav pom cov hauv qab no:
    // т.к. 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

    Raws li koj tuaj yeem pom, Skaffold tagged cov duab nws tus kheej. Los ntawm txoj kev, ntau txoj cai tagging tau txais kev txhawb nqa.

  • Ntxiv rau hauv lub config nws tau qhia context: ./leeroy-app/, i.e. cov ntsiab lus uas cov duab tau sau tau teev tseg.
  • Thaum lub sij hawm xa mus, nws tau txiav txim siab tias peb yuav siv kubectl thiab daim npog qhov ncauj rau qhov tsim nyog manifests.
  • PortForward: zoo ib yam li peb feem ntau xa cov chaw nres nkoj siv kubectl port-forward, peb muab cov lus qhia rau Skaffold kom hu cov lus txib no. Hauv qhov no, qhov chaw nres nkoj hauv zos 9000 raug xa mus rau 8080 hauv Kev xa nrog lub npe leeroy-web.

Nws yog lub sijhawm tso tawm skaffold dev: Pab neeg no yuav tsim ib qho txuas ntxiv "cov lus teb rov qab", piv txwv li. tsis tsuas yog nws yuav sau txhua yam thiab xa mus rau pawg, tab sis kuj tseem yuav qhia koj txog lub xeev ntawm cov pods tam sim no, saib xyuas cov kev hloov pauv thiab hloov kho lub xeev ntawm cov pods.

Nov yog qhov tshwm sim tso tawm skaffold dev --port-forward thaum reassemble:

Kev tshuaj xyuas ntawm Skaffold rau Kubernetes kev txhim kho

Ua ntej, koj tuaj yeem pom tias lub cache raug siv. Tom qab ntawd, daim ntawv thov raug sib sau ua ke, xa tawm, thiab cov chaw nres nkoj xa mus. Txij li tau teev tseg --port-forward, Skaffold xa mus rau qhov chaw nres nkoj web, raws li nws tau nug, tab sis app nws pov ntawm nws tus kheej kev txiav txim siab (xaiv qhov ze tshaj plaws pub dawb). Tom qab no peb tau txais thawj lub cav los ntawm cov ntawv thov.

Cia peb xyuas seb nws ua haujlwm?

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

Hloov cov ntaub ntawv leeroy-app/app.go - ob peb vib nas this dhau ... thiab:

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

Nyob rau tib lub sijhawm, Skaffold nws tus kheej tau nthuav tawm tib yam hauv lub console zoo li ua ntej, tshwj tsis yog ib qho taw tes: nws tsuas yog dov tawm. leeroy-app, thiab tsis yog tag nrho ib zaug.

Kev xyaum ntxiv

Nws tseem tsim nyog hais tias thaum tsim ib qhov project tshiab, configs rau Skaffold tuaj yeem raug bootstrapped siv cov lus txib. init, uas yog yooj yim heev. Tsis tas li ntawd, koj tuaj yeem sau ob peb lub configs: nqa tawm kev txhim kho ntawm lub neej ntawd config, thiab tom qab ntawd yob tawm mus rau theem nrog cov lus txib run (cov txheej txheem tib yam li dev, tsuas yog tsis saib xyuas kev hloov pauv), siv qhov sib txawv config.

Hauv katacoda muaj kev ua thawj coj Nws tseem yooj yim dua nrog piv txwv. Tab sis nws muaj cov sandbox npaj txhij nrog Kubernetes, daim ntawv thov thiab Skaffold. Ib qho kev xaiv zoo yog tias koj txaus siab sim ua qhov tseem ceeb ntawm koj tus kheej.

Ib qho kev siv tau rau Skaffold yog los tsim kev txhim kho ntawm cov chaw taws teeb. Tsis yog txhua tus neeg nyiam khiav Minikube ntawm lawv tus kheej kho vajtse, tom qab ntawd dov tawm daim ntawv thov thiab cia siab tias nws yuav ua haujlwm txaus ... Hauv qhov no, Skaffold daws qhov teeb meem zoo kawg nkaus, uas tuaj yeem lees paub, piv txwv li, los ntawm Reddit engineers, raws li peb muaj. twb tham lawm sau tau hauv peb qhov blog.

Thiab nyob rau hauv daim ntawv no los ntawm Weaveworks koj tuaj yeem nrhiav tau ib qho piv txwv ntawm kev tsim cov raj xa dej rau kev tsim khoom.

xaus

Skaffold yog ib qho cuab yeej yooj yim rau kev tsim cov kav dej uas cuam tshuam nrog kev nthuav tawm cov ntawv thov rau Kubernetes thiab feem ntau tsom rau kev xav tau kev loj hlob. Nws ua rau nws yooj yim heev los tsim ib lub raj xa dej "luv" uas coj mus rau hauv tus account cov kev xav tau ntawm tus tsim tawm, tab sis yog tias xav tau, koj tuaj yeem npaj cov txheej txheem loj dua. Raws li ib qho piv txwv meej ntawm kev siv Skaffold hauv cov txheej txheem CI / CD yog muab xws xeem qhov project ntawm 10 microservices siv lub peev xwm ntawm Kubernetes, gRPC, Istio thiab OpenCensus Tracing.

Skaffold twb yuav luag 8000+ hnub qub ntawm GitHub, yog tsim los ntawm Google thiab yog ib feem ntawm GoogleContainerTools - feem ntau, tam sim no muaj txhua qhov laj thawj ntseeg tias qhov project yuav txhim kho kev zoo siab mus ib txhis.

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib