Nānā o Skaffold no ka hoʻomohala ʻana o Kubernetes

Nānā o Skaffold no ka hoʻomohala ʻana o Kubernetes

Hoʻokahi makahiki a me ka hapa i hala, ma Malaki 5, 2018, ua hoʻokuʻu ʻo Google i ka mana alpha mua o kāna papahana Open Source no CI/CD i kapa ʻia. Pākuʻi, nona ka pahuhopu e hana i "ka hoʻomohala maʻalahi a me ka hana hou ʻana i nā Kubernetes" i hiki i nā mea hoʻomohala ke nānā aku i ka hoʻomohala ma mua o ka hoʻokele. He aha ka mea hoihoi e pili ana iā Skaffold? E like me ka mea i ʻike ʻia, loaʻa iā ia kekahi mau hana hoʻopunipuni i hiki ke hoʻolilo iā ia i mea hana ikaika no ka mea hoʻomohala, a ʻo ka ʻenekini hana paha. E kama'āina kākou i ka papahana a me kona hiki.

NB: Ma ke ala, ua kamaʻilio pōkole mākou e pili ana iā Skaffold i kā mākou laulā ka nānā ʻana i nā mea hana hoʻomohala, pili kona ola me Kubernetes.

Manao. Ke kumu a me nā hiki

No laila, ma ka ʻōlelo maʻamau, hoʻoponopono ʻo Skaffold i ka pilikia o ka hoʻomaʻamaʻa ʻana i ka pōʻaiapili CI/CD (ma ke kūkulu ʻana, paʻi, hoʻolālā i nā pae), hāʻawi i ka mea hoʻomohala manaʻo wikiwiki, ʻo ia. ka hiki ke loaʻa koke i ka hopena o nā hoʻololi code hope - ma ke ʻano o kahi noi hou e holo ana i ka hui Kubernetes. A hiki iā ia ke hana ma nā kaapuni like ʻole (dev, stage, production...), kahi e kōkua ai ʻo Skaffold e wehewehe i nā pipeline pili no ka rollout.

Ua kākau ʻia ke code kumu o Skaffold ma Go, mahele ʻia e ma lalo o ka manuahi Apache License 2.0 (GitHub).

E nānā kākou i nā hana nui a me nā hiʻohiʻona. ʻO ka mea mua e pili ana i kēia:

  • Hāʻawi ʻo Skaffold i nā mea hana no ka hana ʻana i nā paipu CI/CD.
  • Hāʻawi iā ʻoe e nānā i nā loli i ka code kumu ma hope a holo i kahi kaʻina hana o ka hoʻohui ʻana i nā code i loko o nā kiʻi pahu, e paʻi ana i kēia mau kiʻi i loko o ka Docker Registry a kau iā lākou i ka hui Kubernetes.
  • Hoʻopili i nā faila i loko o ka waihona me ka papa kuhikuhi hana i loko o ka ipu.
  • E hoʻāʻo ma ka hoʻohana ʻana i ka pahu-structure-test.
  • Nā awa i mua.
  • Heluhelu i nā moʻolelo o kahi noi e holo ana i loko o kahi pahu.
  • Kōkua i ka hoʻopau ʻana i nā noi i kākau ʻia ma Java, Node.js, Python, Go.

I kēia manawa e pili ana i nā hiʻohiʻona:

  • ʻAʻohe ʻaoʻao ʻaoʻao cluster ʻo Skaffold. ʻO ia, ʻaʻohe pono e hoʻonohonoho hou i nā Kubernetes e hoʻohana i kēia pono.
  • ʻO nā paipu like ʻole no kāu noi. Pono ʻoe e ʻōwili i ke code i ka Minikube kūloko ʻoiai ʻoe e hoʻomohala ana, a laila i ke kahua a i ʻole ka hana ʻana? No keia kumu aia nā ʻikepili a me nā hoʻonohonoho hoʻohana, nā ʻano like ʻole a me nā hae, e ʻae iā ʻoe e wehewehe i nā pipeline ʻokoʻa no hoʻokahi noi.
  • CLI. ʻO nā pono console a me nā hoʻonohonoho wale nō ma YAML. Ma ka Pūnaewele hiki iā ʻoe ke loaʻa nā kuhikuhi i nā hoʻāʻo e hana GUI hoʻokolohua, akā naʻe, i kēia manawa ʻo ia wale nō ke ʻano o ka pono o kekahi iā ia, akā ʻaʻole maoli.
  • Modularity. ʻAʻole ʻo Skaffold kahi mea hōʻiliʻili kūʻokoʻa, akā hoʻoikaika ʻo ia e hoʻohana i nā modula pākahi a i ʻole nā ​​​​ʻoluʻolu i loaʻa no nā hana kikoʻī.

Hōʻike o ka hope:

  • I ka pae hui, hiki iā ʻoe ke hoʻohana:
    • kūkulu ʻia ka docker ma ka ʻāina, i loko o kahi hui me kaniko a i ʻole ma Google Cloud Build;
    • Bazel ma ka ʻāina;
    • ʻO Jib Maven a me Jib Gradle ma ka ʻāina a i ʻole ma Google Cloud Build;
    • holo nā palapala kūkulu maʻamau ma ka ʻāina. Inā pono ʻoe e holo i kahi hoʻonā kūkulu ʻē aʻe (ʻoi aku ka maʻalahi / kamaʻāina / ...), ua wehewehe ʻia ma ka palapala i hoʻomaka ai ʻo Skaffold (laʻana mai ka palapala). ʻAe kēia iā ʻoe e hoʻohana i kekahi ʻohi i hiki ke kapa ʻia me ka hoʻohana ʻana i kahi palapala;
  • Ma ke kahua hoʻāʻo, ʻo ka mea i ʻōlelo ʻia ipu-kūkulu-hoʻāʻo;
  • No ka hoʻolaha ʻana, ua hāʻawi ʻia kēia mau mea:
    • Kubectl;
    • Helm;
    • hoʻopilikino.

Mahalo i kēia, hiki ke kapa ʻia ʻo Skaffold he ʻokoʻa papa hana no ke kūkulu ʻana i ka CI/CD. Eia kekahi laʻana kaʻina hana i ka wā e hoʻohana ai (mai ka palapala papahana):

Nānā o Skaffold no ka hoʻomohala ʻana o Kubernetes

He aha ke ʻano o ka hana a Skaffold ma nā ʻōlelo maʻamau?

  1. Mālama ka pono i nā loli i ka papa kuhikuhi kumu kumu. Inā hoʻololi ʻia nā faila, hoʻonohonoho ʻia lākou me ka pod noi ma ka hui Kubernetes. Inā hiki, me ka hoʻohui ʻole ʻana i ke kiʻi. A i ʻole, ʻākoakoa ʻia kahi kiʻi hou.
  2. Nānā ʻia ke kiʻi i hui ʻia me ka hoʻohana ʻana i ka pahu-structure-test, kau ʻia a hoʻouna ʻia i ka Docker Registry.
  3. Ma hope o kēia, kau ʻia ke kiʻi - kau ʻia ma ka pūʻulu Kubernetes.
  4. Inā hoʻomaka ka hoʻomaka ʻana me ke kauoha skaffold dev, a laila hoʻomaka mākou e loaʻa nā lāʻau mai ka noi, a kali ʻo Skaffold i nā loli e hana hou i nā hana āpau.

Nānā o Skaffold no ka hoʻomohala ʻana o Kubernetes
Hoʻohālike o nā pae nui o ka hana Skaffold

E hoʻomaʻamaʻa. Ke ho'āʻo nei iā Skaffold

No ka hōʻike ʻana i ka hoʻohana ʻana iā Skaffold, e lawe wau i kahi laʻana mai Hale waihona papahana GitHub... No laila, ma laila Hiki iā ʻoe ke ʻike i nā hiʻohiʻona ʻē aʻe e noʻonoʻo ana i nā kikoʻī like ʻole. E hana wau i nā hana āpau ma Minikube. He mea maʻalahi ka hoʻouka ʻana a lawe i kekahi mau minuke, a pono ʻoe e kubectl e hoʻomaka.

E hoʻouka i ka 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

E hoʻopili i ka waihona o Skaffold me nā hiʻohiʻona pono:

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

Ua koho au i kahi laʻana me ʻelua pods, i loko o kēlā me kēia me hoʻokahi palapala Go liʻiliʻi. Hoʻokahi noi ʻo ka frontend (leeroy-web), e hoʻihoʻi hou i ka noi i ka noi ʻelua - ka hope (leeroy-app). E ʻike kākou i kona ʻano:

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

Loaʻa i ka leeroy-app a me ka leeroy-web ke code Go a me nā Dockerfiles maʻalahi no ke kūkulu ʻana i kēia code ma ka ʻāina:

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

ʻAʻole wau e hāʻawi i ke code noi - ua lawa ia e ʻike i kēlā leeroy-web ʻae i nā noi a hoʻopono iā lākou leeroy-app. No laila i loko o nā faila Deployment.yaml aia he lawelawe wale no app (no ka hoʻokele kūloko). awa Pod web e hoʻouna mākou iā mākou iho no ke komo wikiwiki ʻana i ka noi.

E nānāʻia 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

Hōʻike ʻia nā pae āpau i ʻōlelo ʻia ma luna nei. Ma waho aʻe o kēia config, aia kekahi faila me nā hoʻonohonoho honua - ~/.skaffold/config. Hiki ke hoʻoponopono ʻia me ka lima a ma o ka CLI - no ka laʻana, e like me kēia:

skaffold config set --global local-cluster true

Na kēia kauoha e hoʻonohonoho i ka hoʻololi honua local-cluster i ke ano true, a laila ʻaʻole e hoʻāʻo ʻo Skaffold e kiʻi i nā kiʻi i ka papa inoa mamao. Inā ʻoe e hoʻomohala nei ma ka ʻāina, hiki iā ʻoe ke hoʻohana i kēia kauoha e kūkulu i nā kiʻi ma ka ʻāina.

Hoʻi i skaffold.yaml:

  • Ma ke kahua build hōʻike mākou e pono ʻoe e hōʻiliʻili a mālama i ke kiʻi ma ka ʻāina. Ma hope o ka holo ʻana o ke kūkulu ʻana no ka manawa mua, e ʻike mākou i kēia:
    // т.к. 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

    E like me kāu e ʻike ai, ua kau ʻo Skaffold i nā kiʻi iā ia iho. Ma ke ala, kākoʻo ʻia kekahi mau kulekele kau inoa.

  • ʻOi aku ma ka config ua hōʻike ʻia context: ./leeroy-app/, i.e. ka pōʻaiapili kahi i hōʻiliʻili ʻia ai ke kiʻi.
  • Ma ke kahua hoʻolālā, ua hoʻoholo ʻia e hoʻohana mākou i kubectl a me kahi mask no nā hōʻike pono.
  • PortForward: e like me ka hoʻohana mau ʻana i nā awa kubectl port-forward, hāʻawi mākou i nā kuhikuhi iā Skaffold e kāhea i kēia kauoha. I kēia hihia, ua hoʻouna ʻia ke awa kūloko 9000 i 8080 ma Deployment me ka inoa. leeroy-web.

ʻO ka manawa e hoʻomaka ai skaffold dev: E hana ana ka hui i ka "lope pane" mau, i.e. ʻAʻole wale ia e hōʻiliʻili i nā mea āpau a kau aku i ka pūpū, akā e haʻi pū iā ʻoe e pili ana i ke kūlana o nā pods i kēia manawa, e nānā i nā loli a hoʻonui i ke kūlana o nā pods.

Eia ka hopena hoʻomaka skaffold dev --port-forward ke hui hou:

Nānā o Skaffold no ka hoʻomohala ʻana o Kubernetes

ʻO ka mea mua, hiki iā ʻoe ke ʻike e hoʻohana ʻia ka cache. A laila, hui ʻia ka noi, hoʻonohonoho ʻia, a hoʻouna ʻia nā awa. Mai ka mea i hoakakaia --port-forward, Hoʻouna ʻo Skaffold i ke awa i web, e like me ka ninauia ana mai, aka eia app ua kiola ʻo ia ma kona manaʻo ponoʻī (koho i ka manuahi kokoke loa). Ma hope o kēia, loaʻa iā mākou nā moʻolelo mua mai nā noi.

E nānā kāua inā hana?

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

Hoʻololi i ka faila leeroy-app/app.go - hala kekahi mau kekona... a:

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

I ka manawa like, ua hōʻike ʻo Skaffold iā ia iho i ka mea like ma ka console e like me ka wā ma mua, koe wale nō kahi helu: ua ʻōwili wale ʻia. leeroy-app, aole i ka manawa hookahi.

Hoʻomaʻamaʻa hou aku

He mea kūpono hoʻi e haʻi i ka wā e hana ai i kahi papahana hou, hiki ke hoʻopaʻa ʻia nā configs no Skaffold me ka hoʻohana ʻana i ke kauoha. init, he mea maʻalahi loa. Eia hou, hiki iā ʻoe ke kākau i kekahi mau configs: hoʻokō i ka hoʻomohala ʻana i ka config paʻamau, a laila ʻōwili i ke kahua me ke kauoha. run (ka hana like me dev, ʻaʻole nānā wale i nā loli), me ka hoʻohana ʻana i kahi config ʻē aʻe.

Aia ma katacoda alakaʻi ʻOi aku ka maʻalahi me kahi laʻana. Akā hāʻawi ia i kahi pahu one i mākaukau me Kubernetes, kahi noi a me Skaffold. ʻO kahi koho maikaʻi inā makemake ʻoe e hoʻāʻo iā ʻoe iho i nā kumu kumu.

ʻO kekahi hihia hoʻohana no Skaffold ʻo ia ke alakaʻi ʻana i ka hoʻomohala ʻana ma kahi pūʻulu mamao. ʻAʻole ʻoluʻolu nā mea a pau i ka holo ʻana iā Minikube ma kā lākou lako ponoʻī, a laila e ʻōwili i ka noi a me ka manaʻo e hana pono ia ... Ma kēia hihia, hoʻoponopono maikaʻi ʻo Skaffold i ka pilikia, hiki ke hōʻoia ʻia, no ka laʻana, e nā ʻenekini Reddit, e like me kā mākou. ua kūkākūkā mua ʻia palapalaʻo ia i loko o kā mākou blog.

A iloko kēia paʻi mai Weaveworks hiki iā ʻoe ke ʻike i kahi laʻana o ka hana ʻana i kahi pipeline no ka hana ʻana.

hopena

He mea hana maʻalahi ʻo Skaffold no ke kūkulu ʻana i nā paipu e pili ana i ka ʻōwili ʻana i nā noi i nā Kubernetes a ua kālele nui ʻia i nā pono hoʻomohala. He mea maʻalahi ka hana ʻana i kahi pipeline "pōkole" e noʻonoʻo i nā pono kumu o ka mea hoʻomohala, akā inā makemake ʻia, hiki iā ʻoe ke hoʻonohonoho i nā kaʻina hana nui. ʻO kekahi o nā hiʻohiʻona maopopo o ka hoʻohana ʻana iā Skaffold i nā kaʻina CI/CD haawiia ia he papahana hoʻāʻo o 10 microservices e hoʻohana ana i nā mana o Kubernetes, gRPC, Istio a me OpenCensus Tracing.

Loaʻa iā Skaffold kokoke i 8000+ mau hōkū ma GitHub, hoʻomohala ʻia e Google a he ʻāpana ia o GoogleContainerTools - ma ka laulā, i kēia manawa aia nā kumu a pau e manaʻoʻiʻo ai e ulu hauʻoli ka papahana ma hope.

PS

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka