5 幎ååã® 2018 幎 XNUMX æ XNUMX æ¥ãGoogle 㯠CI/CD çšãªãŒãã³ãœãŒã¹ ãããžã§ã¯ãã®æåã®ã¢ã«ãã¡çããªãªãŒã¹ããŸããã
NB: ãšããã§ãSkaffold ã«ã€ããŠã¯ãã§ã«äžè¬çãªèšäºã§ç°¡åã«èª¬æããŸããã
çè«ã ç®çãšæ©èœ
ãããã£ãŠãäžè¬çã«èšãã°ãSkaffold ã¯ãéçºè ã«ããã³ãââãã®ãã£ãŒãããã¯ãæäŸããããšã§ãCI/CD ãµã€ã¯ã« (ãã«ããããã·ã¥ããããã€ã®æ®µé) ãèªååããåé¡ã解決ããŸãã ãã®åŸã®ã³ãŒãå€æŽã®çµæããKubernetes ã¯ã©ã¹ã¿ãŒå ã§å®è¡ãããæŽæ°ãããã¢ããªã±ãŒã·ã§ã³ã®åœ¢åŒã§è¿ éã«åãåãæ©èœã ãŸããSkaffold ã¯ãããŸããŸãªåè·¯ (éçºãã¹ããŒãžãæ¬çªãªã©) ã§åäœããããšãã§ããããŒã«ã¢ãŠãã«å¯Ÿå¿ãããã€ãã©ã€ã³ãèšè¿°ããã®ã«åœ¹ç«ã¡ãŸãã
Skaffold ã®ãœãŒã¹ã³ãŒã㯠Go ã§æžãããŠããã
äž»ãªæ©èœãšç¹åŸŽãèŠãŠã¿ãŸãããã æåã®ãã®ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- Skaffold ã¯ãCI/CD ãã€ãã©ã€ã³ãäœæããããã®ããŒã«ãæäŸããŸãã
- ããã¯ã°ã©ãŠã³ãã§ãœãŒã¹ ã³ãŒãã®å€æŽãç£èŠããã³ãŒããã³ã³ãã ã€ã¡ãŒãžã«ã¢ã»ã³ãã«ãããããã®ã€ã¡ãŒãžã Docker ã¬ãžã¹ããªã«å ¬éããŠãKubernetes ã¯ã©ã¹ã¿ã«ãããã€ããèªåããã»ã¹ãå®è¡ã§ããŸãã
- ãªããžããªå ã®ãã¡ã€ã«ãã³ã³ããå ã®äœæ¥ãã£ã¬ã¯ããªãšåæããŸãã
- Container-Structure-test ã䜿çšããŠèªåçã«ãã¹ãããŸãã
- ããŒãã転éããŸãã
- ã³ã³ããå ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã®ãã°ãèªã¿åããŸãã
- JavaãNode.jsãPythonãGo ã§æžãããã¢ããªã±ãŒã·ã§ã³ã®ãããã°ã«åœ¹ç«ã¡ãŸãã
次ã«æ©èœã«ã€ããŠèª¬æããŸãã
- Skaffold èªäœã«ã¯ã¯ã©ã¹ã¿ãŒåŽã®ã³ã³ããŒãã³ãã¯ãããŸããã ã€ãŸãããã®ãŠãŒãã£ãªãã£ã䜿çšããããã« Kubernetes ãããã«æ§æããå¿ èŠã¯ãããŸããã
- ã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªãã€ãã©ã€ã³ã éçºäžã«ã³ãŒããããŒã«ã«ã® Minikube ã«ããŒã«ã¢ãŠããããã®åŸã¹ããŒãžã³ã°ãŸãã¯éçšç°å¢ã«ããŒã«ã¢ãŠãããå¿
èŠããããŸãã? ãã®ç®çã®ããã«ã
ãããã£ãŒã« ãŠãŒã¶ãŒæ§æãç°å¢å€æ°ããã©ã°ã䜿çšãããšãXNUMX ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠããŸããŸãªãã€ãã©ã€ã³ãèšè¿°ããããšãã§ããŸãã - CLIã YAML ã®ã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ãšæ§æã®ã¿ã ã€ã³ã¿ãŒãããäžã§ã¯ãäœæã®è©Šã¿ã«é¢ããåèè³æãèŠã€ããããšãã§ããŸãã
å®éšçãªGUI , ãã ããçŸæç¹ã§ã¯ãããã¯èª°ãã圌ãå¿ èŠãšããŠããã ãã§ãå®éã«ã¯å¿ èŠã§ã¯ãªãããšãæå³ããŠããå¯èœæ§ãæãé«ãã§ãã - ã¢ãžã¥ãŒã«æ§ã Skaffold ã¯ã¹ã¿ã³ãã¢ãã³ã®ããŒãã¹ã¿ãŒã§ã¯ãããŸããããç¹å®ã®ã¿ã¹ã¯ã«åå¥ã®ã¢ãžã¥ãŒã«ãŸãã¯æ¢åã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããããåªããŠããŸãã
åŸè ã®äŸ:
- çµã¿ç«ãŠæ®µéã§ã¯ã以äžã䜿çšã§ããŸãã
- docker ã¯ããŒã«ã«ãkaniko ã䜿çšããã¯ã©ã¹ã¿ãŒå ããŸã㯠Google Cloud Build ã§ãã«ãããŸãã
- å°å ã§ã¯ããŒã«ã
- Jib Maven ãš Jib Gradle ã¯ããŒã«ã«ãŸã㯠Google Cloud Build ã«ãããŸãã
- ã«ã¹ã¿ã ãã«ã ã¹ã¯ãªããã¯ããŒã«ã«ã§å®è¡ãããŸãã å¥ã® (ããæè»ã§äœ¿ãæ
£ãã) ãã«ã ãœãªã¥ãŒã·ã§ã³ãå®è¡ããå¿
èŠãããå Žåã¯ãSkaffold ããããèµ·åããããã«ã¹ã¯ãªããã«èšè¿°ãããŸã (
ããã¥ã¡ã³ãããã®äŸ ïŒã ããã«ãããã¹ã¯ãªããã䜿çšããŠåŒã³åºãããšãã§ããä»»æã®ã³ã¬ã¯ã¿ãŒã䜿çšã§ããããã«ãªããŸãã
- ãã¹ã段éã§ã¯ããã§ã«è¿°ã¹ãããã«ã
ã³ã³ããæ§é ã®ãã¹ã ; - ãããã€ã¡ã³ãçšã«ä»¥äžãæäŸãããŸãã
- ã¯ãã¯ãã«;
- å ;
- ã«ã¹ã¿ãã€ãºã
ãã®ãããã§ãSkaffold ã¯ãŠããŒã¯ãªè£œåãšèšããŸãã CI/CDãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã ããã䜿çšããå Žåã®ã¯ãŒã¯ãããŒã®äŸã次ã«ç€ºããŸã (ãããžã§ã¯ã ããã¥ã¡ã³ããã)ã
ã¹ã«ãã©ãŒã«ãã®äœåã¯äžè¬çã«ã©ã®ãããªãã®ã§ãã?
- ãã®ãŠãŒãã£ãªãã£ã¯ããœãŒã¹ ã³ãŒã ãã£ã¬ã¯ããªå ã®å€æŽãç£èŠããŸãã ãã¡ã€ã«ã«å€æŽãå ããããå Žåããã®å€æŽã¯ Kubernetes ã¯ã©ã¹ã¿ãŒå ã®ã¢ããªã±ãŒã·ã§ã³ ããããšåæãããŸãã å¯èœã§ããã°ãã€ã¡ãŒãžãåçµã¿ç«ãŠããã«ã ãã以å€ã®å Žåã¯ãæ°ããã€ã¡ãŒãžãã¢ã»ã³ãã«ãããŸãã
- çµã¿ç«ãŠãããã€ã¡ãŒãžã¯ãcontainer- Structure-test ã䜿çšããŠãã§ãã¯ãããã¿ã°ä»ããã㊠Docker ã¬ãžã¹ããªã«éä¿¡ãããŸãã
- ãã®åŸãã€ã¡ãŒãžããããã€ãããKubernetes ã¯ã©ã¹ã¿ãŒã«ãããã€ãããŸãã
- ã³ãã³ãã䜿çšããŠèµ·åãåæåãããå Žå
skaffold dev
ããã®åŸãã¢ããªã±ãŒã·ã§ã³ãããã°ã®åä¿¡ãéå§ããSkaffold ã¯ãã¹ãŠã®ã¢ã¯ã·ã§ã³ãå床繰ãè¿ãããã®å€æŽãåŸ ã¡ãŸãã
Skaffold æäœã®äž»ãªæ®µéã®å³
ç·Žç¿ããã ã¹ãã£ãã©ãŒã«ããè©Šã
Skaffold ã®äœ¿çšæ³ã瀺ãããã«ã次ã®äŸãåãäžããŸãã
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
ç§ã¯ãããããã« XNUMX ã€ã®å°ã㪠Go ã¢ããªã±ãŒã·ã§ã³ãå«ãŸãã XNUMX ã€ã®ããããæã€äŸãéžæããŸããã XNUMX ã€ã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã³ããšã³ã (leeroy-web) ã§ããªã¯ãšã¹ãã XNUMX çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã§ããããã¯ãšã³ã (leeroy-app) ã«ãªãã€ã¬ã¯ãããŸãã ã©ã®ãããªãã®ããèŠãŠã¿ãŸããã:
~/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 ã³ãŒããšããã®ã³ãŒããããŒã«ã«ã§ãã«ãããããã®åçŽãª Dockerfile ãå«ãŸããŠããŸãã
~/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
ã芧ã®ãšãããSkaffold ã¯èªåã§ç»åã«ã¿ã°ãä»ããŸããã ã¡ãªã¿ã«ãããã€ãã®ã¿ã°ä»ãããªã·ãŒããµããŒããããŠããŸãã
- ããã«èšå®ã§ããã瀺ãããŠããŸã
context: ./leeroy-app/
ãã€ãŸãç»åãåéãããã³ã³ããã¹ããæå®ãããŸãã - ãããã€ã¡ã³ã段éã§ã¯ãå¿ èŠãªãããã§ã¹ãã« kubectl ãšãã¹ã¯ã䜿çšããããšã決å®ãããŸãã
-
PortForward
: é垞䜿çšããŠããŒãã転éããæ¹æ³ãšåæ§ã§ããkubectl port-forward
ãSkaffold ã«ãã®ã³ãã³ããåŒã³åºãããã«æ瀺ããŸãã ãã®å ŽåãããŒã«ã« ããŒã 9000 ã¯ããããã€ã¡ã³ãå ã® 8080 ã«æ¬¡ã®ååã§è»¢éãããŸããleeroy-web
.
æã¡äžãã®æéã§ã skaffold dev
: ããŒã ã¯ç¶ç¶çãªããã£ãŒããã㯠ã«ãŒãããäœæããŸãã ãã¹ãŠãåéããŠã¯ã©ã¹ã¿ãŒã«ãããã€ããã ãã§ãªããçŸæç¹ã§ã®ãããã®ç¶æ
ãéç¥ããå€æŽãç£èŠãããããã®ç¶æ
ãæŽæ°ããŸãã
æã¡äžãçµæã¯ãã¡ã skaffold dev --port-forward
åçµã¿ç«ãŠãããšã:
ãŸãããã£ãã·ã¥ã䜿çšãããŠããããšãããããŸãã 次ã«ãã¢ããªã±ãŒã·ã§ã³ãã¢ã»ã³ãã«ããããã€ãããããŒãã転éãããŸãã æå®ãããŠãã --port-forward
ãSkaffold ã¯ããŒãã次ã®ããã«è»¢éããŸããã 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!!!
åæã«ãSkaffold èªäœã¯ãXNUMX ç¹ãé€ããŠä»¥åãšåããã®ãã³ã³ãœãŒã«ã«è¡šç€ºããŸãããããŒã«ã¢ãŠããããã ãã§ãã leeroy-app
ãäžåºŠã«ã§ã¯ãããŸããã
ãã£ãšç·Žç¿
æ°ãããããžã§ã¯ããäœæãããšãã«ã次ã®ã³ãã³ãã䜿çšã㊠Skaffold ã®æ§æãããŒãã¹ãã©ããã§ããããšã«ãèšåãã䟡å€ããããŸãã init
ããšãŠã䟿å©ã§ãã ããã«ãè€æ°ã®æ§æãäœæã§ããŸããããã©ã«ãã®æ§æã§éçºãå®è¡ããã³ãã³ãã䜿çšããŠã¹ããŒãžã³ã°ã«ããŒã«ã¢ãŠãããŸãã run
(ãšåãããã»ã¹ dev
ãå€æŽãç£èŠããªãã ãã§ãïŒãå¥ã®æ§æã䜿çšããŸãã
ã«ã¿ã³ãŒãã«ã¯ã
Skaffold ã®èãããã䜿çšäŸã® XNUMX ã€ã¯ããªã¢ãŒã ã¯ã©ã¹ã¿ãŒäžã§éçºãè¡ãããšã§ãã 誰ãããèªåã®ããŒããŠã§ã¢ã§ Minikube ãå®è¡ããã¢ããªã±ãŒã·ã§ã³ãããŒã«ã¢ãŠãããŠé©åã«æ©èœããããšãæåŸ
ã§ããããã§ã¯ãããŸããããã®å ŽåãSkaffold ãåé¡ãå®å
šã«è§£æ±ºããŸããããã¯ãããšãã° Reddit ãšã³ãžãã¢ã«ãã£ãŠç¢ºèªã§ããŸãããã§ã«è°è«ãããŠããŸã
ãšã§
ãŸãšã
Skaffold ã¯ãã¢ããªã±ãŒã·ã§ã³ã Kubernetes ã«å±éãããã€ãã©ã€ã³ãæ§ç¯ããããã®äŸ¿å©ãªããŒã«ã§ãããäž»ã«éçºããŒãºã«çŠç¹ãåœãŠãŠããŸãã ããã«ãããéçºè
ã®åºæ¬çãªããŒãºãèæ
®ãããçãããã€ãã©ã€ã³ãéåžžã«ç°¡åã«äœæã§ããŸãããå¿
èŠã«å¿ããŠããã倧ããªããã»ã¹ãç·šæããããšãã§ããŸãã CI/CD ããã»ã¹ã§ Skaffold ã䜿çšããæ確ãªäŸã® XNUMX ã€ãšããŠ
Skaffold ã¯ãã§ã« GitHub ã§ã»ãŒ 8000 以äžã®ã¹ã¿ãŒãç²åŸããŠãããGoogle ã«ãã£ãŠéçºããã
PS
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
Kubernetes äžã§å®è¡ãããã¢ããªã±ãŒã·ã§ã³ã®éçºè åãã®ããŒã« "; - «
werf - Kubernetes ã® CI / CD çšããŒã« (æŠèŠãšãããªã¬ããŒã) "; - «
Garden v0.10.0: ã©ãããããã«ã¯ Kubernetes ã¯å¿ èŠãããŸãã "; - «
Kubernetes ã®ãã³ããšã³ã: ããŒã«ã«éçºãšãã¬ãã¬ãŒã³ã¹ã«ã€ã㊠'ã
åºæïŒ habr.com