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;
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):
He aha ke ʻano o ka hana a Skaffold ma nā ʻōlelo maʻamau?
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.
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.
Ma hope o kēia, kau ʻia ke kiʻi - kau ʻia ma ka pūʻulu Kubernetes.
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.
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ʻ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:
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.
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:
ʻ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.