ืืคื ื ืฉื ื ืืืฆื, ื-5 ืืืจืฅ 2018, ืืืื ืืืฆืืื ืืช ืืจืกืช ืืืืคื ืืจืืฉืื ื ืฉื ืคืจืืืงื ืืงืื ืืคืชืื ืฉืื ื-CI/CD ืืฉื
NB: ืืื, ืืืจ ืืืืจื ื ืืงืฆืจื ืขื ืกืงืืคืืื ืืื ืจื ืฉืื ื
ืชึตืืึนืจึดืึธื. ืืืจื ืืืืืืืช
ืื, ืืืืคื ืืืื, Skaffold ืคืืชืจ ืืช ืืืขืื ืฉื ืืืืืืฆืื ืฉื ืืืืืจ ื-CI/CD (ืืฉืืื ืืื ืืื, ืืืืืคื, ืืคืจืืกื), ืืืฆืืข ืืืคืชื ืืฉืื ืืืืจ, ืืืืืจ. ืืืืืืช ืืงืื ืืืืืจืืช ืืช ืืชืืฆืื ืฉื ืฉืื ืืืื ืืงืื ืืืืื - ืืฆืืจื ืฉื ืืคืืืงืฆืื ืืขืืืื ืช ืืคืืขืืช ืืืฉืืื Kubernetes. ืืื ืืืื ืืขืืื ืืืขืืืื ืฉืื ืื (ืืคืชื, ืฉืื, ืืคืงื...), ืฉืขืืืจื Skaffold ืขืืืจ ืืชืืจ ืืช ืืฆืื ืืจืืช ืืืชืืืืื ืืืคืฆื.
ืงืื ืืืงืืจ ืฉื Skaffold ืืชืื ื-Go,
ืืืื ื ืกืชืื ืขื ืืคืื ืงืฆืืืช ืืืชืืื ืืช ืืขืืงืจืืืช. ืืจืืฉืื ืื ืืืืืื ืืช ืืืืจืื ืืืืื:
- Skaffold ืืฆืืขื ืืืื ืืืฆืืจืช ืฆืื ืืจืืช CI/CD.
- ืืืคืฉืจ ืื ืืขืงืื ืืืจ ืฉืื ืืืื ืืงืื ืืืงืืจ ืืจืงืข ืืืืคืขืื ืชืืืื ืืืืืืื ืฉื ืืจืืืช ืงืื ืืชืืื ืืช ืงืื ืืืื ืจ, ืคืจืกืื ืชืืื ืืช ืืื ื-Docker Registry ืืคืจืืกื ืืืฉืืื Kubernetes.
- ืืกื ืืจื ืงืืฆืื ืืืืืจ ืขื ืกืคืจืืืช ืืขืืืื ืืืืื.
- ืืืืง ืืืืืืืืช ืืืืฆืขืืช ืืืื-ืืื ื-container.
- ืืขืืืจ ืืฆืืืืช.
- ืงืืจื ืืช ืืืืื ืื ืฉื ืืืฉืื ืืคืืขื ืืืืื.
- ืขืืืจ ืืืืชืืจ ืืืืื ืืืืฉืืืื ืฉื ืืชืื ื-Java, Node.js, Python, Go.
ืขืืฉืื ืืืื ืืชืืื ืืช:
- ื- Skaffold ืขืฆืื ืืื ืจืืืืื ืืฆื ืืืฉืืื. ืืืืืจ, ืืื ืฆืืจื ืืืืืืจ ืขืื ืืืชืจ ืืช Kubernetes ืืฉืืืืฉ ืืืื ืืฉืืจืืช ืืื.
- ืฆืื ืืจืืช ืฉืื ืื ืขืืืจ ืืืืฉืื ืฉืื. ืืื ืืชื ืฆืจืื ืืืืื ืืช ืืงืื ื-Minikube ืืืงืืืืช ืืืื ืฉืืชื ืืคืชื, ืืืืืจ ืืื ืืืื ืื ืืืคืงื? ืืืืจื ืื ืืฉ
ืคืจืืคืืืื ืืชืฆืืจืืช ืืฉืชืืฉ, ืืฉืชื ื ืกืืืื ืืืืืื, ืืืืคืฉืจืื ืื ืืชืืจ ืฆืื ืืจืืช ืฉืื ืื ืขืืืจ ืืืฉืื ืืื. - CLI. ืจืง ืืื ืขืืจ ืืชืฆืืจืืช ืืกืืฃ ื-YAML. ืืืื ืืจื ื ื ืืชื ืืืฆืื ืืคื ืืืช ืื ืืกืืื ืืช ืืฆืืจื
GUI ื ืืกืืื ื , ืขื ืืืช, ืืจืืข ืื ืื ืจืื ืจืง ืืืืจ ืฉืืืฉืื ืฆืจืื ืืืชื, ืืื ืื ืืืืช. - ืืืืืืจืืืช. Skaffold ืืื ื ืงืืืฃ ืขืฆืืื, ืืื ืฉืืืฃ ืืืฉืชืืฉ ืืืืืืืื ืืืืืื ืื ืืคืชืจืื ืืช ืงืืืืื ืขืืืจ ืืฉืืืืช ืกืคืฆืืคืืืช.
ืืืืจ ืฉื ืืืืจืื:
- ืืฉืื ืืืจืืื ื ืืชื ืืืฉืชืืฉ ื:
- docker ืืื ืืช ืืืืคื ืืงืืื, ืืืฉืืื ืืืืฆืขืืช kaniko ืื ื-Google Cloud Build;
- ืืื ืืงืืืืช;
- Jib Maven ื-Jib Gradle ืืืืคื ืืงืืื ืื ื-Google Cloud Build;
- ืกืงืจืืคืืื ืืื ืืื ืืืชืืืื ืืืฉืืช ืคืืขืืื ืืืืคื ืืงืืื. ืื ืืชื ืฆืจืื ืืืคืขืื ืคืชืจืื ืื ืืื ืืืจ (ืืืืฉ/ืืืืจ/...), ืืื ืืชืืืจ ืืกืงืจืืคื ืื ืฉ-Skaffold ืืฉืืง ืืืชื (
ืืืืื ืืชืื ืชืืขืื ). ืื ืืืคืฉืจ ืื ืืืฉืชืืฉ ืืื ืืกืคื ืฉื ืืชื ืืงืจืื ืื ืืืืฆืขืืช ืกืงืจืืคื;
- ืืฉืื ืืืืืงื, ืืืืืจ ืืืจ
ืืืื-ืืื ื-ืืืื ; - ืืคืจืืกื ืืกืืคืงืื ืืืืจืื ืืืืื:
- Kubectl;
- ืึถืึถื;
- ืืืชืืื ืืืฉืืช.
ืืืืืช ืืื, ืกืงืืคืืื ืืืื ืืืืงืจื ืืืืืื ืืกืืจืช ืืื ืืืช CI/CD. ืืืื ืืจืืืช ืขืืืื ืืืืืื ืืขืช ืืฉืืืืฉ ืื (ืืชืื ืชืืขืื ืืคืจืืืงื):
ืืื ื ืจืืืช ืืขืืืื ืฉื ืกืงืคืืื ืืืื ืืื ืืืืืื?
- ืืื ืืฉืืจืืช ืขืืงื ืืืจ ืฉืื ืืืื ืืกืคืจืืืช ืงืื ืืืงืืจ. ืื ืืืฆืขื ืฉืื ืืืื ืืงืืฆืื, ืื ืืกืื ืืจื ืื ืขื ืชืจืืื ืืืืฉืืืื ืืืฉืืื Kubernetes. ืื ืืคืฉืจ, ืืืื ืืืจืืื ืืช ืืชืืื ื ืืืืฉ. ืืืจืช, ืชืืื ื ืืืฉื ืืืจืืืช.
- ืืชืืื ื ืืืืจืืืช ื ืืืงืช ืืืืฆืขืืช container-structure-test, ืืชืืืืช ืื ืฉืืืช ื-Docker Registry.
- ืืืืจ ืืื, ืืชืืื ื ื ืคืจืกืช - ืคืจืืกื ืืืฉืืื Kubernetes.
- ืื ืืืฉืงื ืืืชืืื ืืืืฆืขืืช ืืคืงืืื
skaffold dev
, ืื ืื ืื ื ืืชืืืืื ืืงืื ืืืื ืื ืืืืคืืืงืฆืื, ื-Skaffold ืืืื ืืฉืื ืืืื ืืื ืืืืืจ ืขื ืื ืืคืขืืืืช ืฉืื.
ืืืืจ ืืฉืืืื ืืขืืงืจืืื ืฉื ืคืขืืืช ืกืงืคืืื
ืชืจืืื. ืื ืกื ืืช ืกืงืคืืื
ืืื ืืืืืื ืืช ืืฉืืืืฉ ื-Skafold, ืืงื ืืืืื ืืชืื
ืืชืงื ืืช 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
ืืืจืชื ืืืืื ืขื ืฉื ื ืคืืืื, ืฉืื ืืื ืืืื ืืคืืืงืฆืืืช Go ืงืื ื ืืืช. ืืคืืืงืฆืื ืืืช ืืื ื-frontend (leeroy-web), ืฉืืคื ื ืืช ืืืงืฉื ืืืคืืืงืฆืื ืืฉื ืืื - ื-backend (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 ื-Dockerfiles ืคืฉืืืื ืืื ืืืช ืงืื ืื ืืืืคื ืืงืืื:
~/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
ืื ื ืืฆืืื ืื ืฉืขืืื ืืืกืืฃ ืืืฉืืืจ ืืช ืืชืืื ื ืืืืคื ืืงืืื. ืืืืจ ืฉื-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
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืกืงืืคืืื ืชืืื ืืช ืืชืืื ืืช ืืขืฆืื. ืืื, ืืกืคืจ ืืืื ืืืช ืชืืื ื ืชืืืช.
- ืืืืฉื ืืชืฆืืจื ืื ืืฆืืื
context: ./leeroy-app/
, ืืืืืจ ืืฆืืื ืืืงืฉืจ ืฉืื ื ืืกืคืช ืืชืืื ื. - ืืฉืื ืืคืจืืกื ื ืงืืข ืฉื ืฉืชืืฉ ื-kubectl ืืืืกืื ืืื ืืคืกืืื ืืืจืืฉืื.
-
PortForward
: ืืืืื ืืืืคื ืฉืื ืื ื ืืืจื ืืื ืืขืืืจืื ืืฆืืืืช ืืืืฆืขืืชkubectl port-forward
, ืื ื ื ืืชื ืื ืืืจืืืช ื-Skaffold ืืงืจืื ืืคืงืืื ืื. ืืืงืจื ืื, ืืฆืืื ืืงืืืืช 9000 ืืืขืืจืช ื-8080 ืืคืจืืกื ืขื ืืฉืleeroy-web
.
ืืืืข ืืืื ืืืฉืืง skaffold dev
: ืืฆืืืช ืืฆืืจ "ืืืืืช ืืฉืื" ืืชืืฉืืช, ืืืืืจ. ืื ืจืง ืฉืืื ืืืกืืฃ ืืื ืืืคืจืืก ืืืชื ืืืฉืืื, ืืื ืื ืืกืคืจ ืืื ืขื ืืฆื ืืคืืืื ืืจืืข, ืื ืืจ ืฉืื ืืืื ืืืขืืื ืืช ืืฆื ืืคืืืื.
ืื ื ืชืืฆืืช ืืืฉืงื skaffold dev --port-forward
ืืขืช ืืจืืื ืืืืฉ:
ืจืืฉืืช, ืืชื ืืืื ืืจืืืช ืฉืืืืืื ื ืืฆื ืืฉืืืืฉ. ืืืืจ ืืื, ืืืคืืืงืฆืื ืืืจืืืช, ื ืคืจืกืช ืืืฆืืืืช ืืืขืืจืืช. ืืื ืฉืฆืืื --port-forward
, ืกืงืคืื ืืขืืืจ ืืช ืื ืื ืืืื 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!!!
ืืืงืืื, ืกืงืืคืืื ืขืฆืื ืืฆืืื ืืช ืืืชื ืืืืจ ืืงืื ืกืืื ืืื ืงืืื, ืืืขื ื ืงืืื ืืืช: ืืื ืืชืืืืื ืจืง leeroy-app
, ืืื ืืืช ืืืช.
ืขืื ืืืืื
ืจืืื ืื ืืืืืืจ ืื ืืขืช ืืฆืืจืช ืคืจืืืงื ืืืฉ, ื ืืชื ืืืชืื ืชืฆืืจืืช ืขืืืจ Skaffold ืืืืฆืขืืช ืืคืงืืื init
, ืืื ืืืื ื ืื. ืื ืืกืฃ, ืืชื ืืืื ืืืชืื ืืกืคืจ ืืืืจืืช: ืืฆืข ืคืืชืื ืขื ืชืฆืืจืช ืืจืืจืช ืืืืื, ืืืืืจ ืืื ืืืื ืืฉืื ืขื ืืคืงืืื run
(ืืืชื ืชืืืื ืืื dev
, ืคืฉืื ืื ืขืืงื ืืืจ ืฉืื ืืืื), ืืืืฆืขืืช ืชืฆืืจื ืืืจืช.
ืขื ืงืืงืืื ืืฉ
ืืงืจื ืฉืืืืฉ ืืคืฉืจื ืืื ืขืืืจ Skaffold ืืื ืืืฆืืข ืคืืชืื ืขื ืืฉืืื ืืจืืืง. ืื ืืืืื ื ืื ืืืคืขืื ืืช Minikube ืขื ืืืืืจื ืฉืื, ืืื ืืืืื ืืช ืืืคืืืงืฆืื ืืืฆืคืืช ืฉืืื ืชืคืขื ืืจืืื... ืืืงืจื ืื, Skaffold ืคืืชืจ ืืช ืืืขืื ืืฆืืจื ืืืฉืืืช, ืื ืฉื ืืชื ืืืฉืจ, ืืืฉื, ืขื ืืื ืืื ืืกื Reddit, ืืคื ืฉืืฉ ืื ื ืืืจ ืื ื
ืื
ืืกืงื ื
Skaffold ืืื ืืื ื ืื ืืื ืืืช ืฆืื ืืจืืช ืืืืืืื ืืคืขืืช ืืืฉืืืื ื-Kubernetes ืืืชืืงืืื ืืขืืงืจ ืืฆืจืื ืคืืชืื. ืื ืืงื ืืืื ืขื ืืฆืืจืช ืฆืื ืืจ "ืงืฆืจ" ืฉืืืงื ืืืฉืืื ืืช ืืฆืจืืื ืืืกืืกืืื ืฉื ืืืคืชื, ืื ืื ืชืจืฆื, ืืชื ืืืื ืืืจืื ืชืืืืืื ืืืืืื ืืืชืจ. ืืืืช ืืืืืืืืช ืืืจืืจืืช ืืฉืืืืฉ ื-Skaffold ืืชืืืืื CI/CD
ื-Skaffold ืืืจ ืืฉ ืืืขื 8000+ ืืืืืื ื-GitHub, ืคืืชืื ืขื ืืื ืืืื ืืืื ืืืง ืืื ื
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืืืื ืืืคืชืื ืืคืืืงืฆืืืช ืืคืืขืืืช ืขื Kubernetes "; - ยซ
werf - ืืืื ืฉืื ื ืขืืืจ CI / CD ื-Kubernetes (ืกืงืืจื ืืืืืช ืืืื ืืืืื) "; - ยซ
Garden v0.10.0: ืืืืฉื ืื ืืื ืฉืื ืื ืฆืจืื Kubernetes "; - ยซ
ืขืฆืืช ืืืจืืงืื ืฉื Kubernetes: ืขื ืคืืชืื ืืงืืื ืืืื ืืืืืช ".
ืืงืืจ: www.habr.com