ืกืงื™ืจื” ืฉืœ Skaffold ืขื‘ื•ืจ ืคื™ืชื•ื— Kubernetes

ืกืงื™ืจื” ืฉืœ Skaffold ืขื‘ื•ืจ ืคื™ืชื•ื— Kubernetes

ืœืคื ื™ ืฉื ื” ื•ื—ืฆื™, ื‘-5 ื‘ืžืจืฅ 2018, ื’ื•ื’ืœ ื”ื•ืฆื™ืื” ืืช ื’ืจืกืช ื”ืืœืคื ื”ืจืืฉื•ื ื” ืฉืœ ืคืจื•ื™ืงื˜ ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืœื” ืœ-CI/CD ื‘ืฉื ืกืงืคื•ืœื“, ืฉืžื˜ืจืชื• ื”ื™ื™ืชื” ืœื™ืฆื•ืจ "ืคื™ืชื•ื— Kubernetes ืคืฉื•ื˜ ื•ื ื™ืชืŸ ืœื—ื–ื•ืจ ืขืœื™ื•", ื›ืš ืฉืžืคืชื—ื™ื ื™ื•ื›ืœื• ืœื”ืชืžืงื“ ื‘ืคื™ืชื•ื— ื•ืœื ื‘ื ื™ื”ื•ืœ. ืžื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืขื ื™ื™ืŸ ื‘ืกืงืคื•ืœื“? ื›ืคื™ ืฉืžืชื‘ืจืจ, ื™ืฉ ืœื• ื›ืžื” ื˜ืจื™ืงื™ื ื‘ืฉืจื•ื•ืœ ืฉื™ื›ื•ืœื™ื ืœื”ืคื•ืš ืื•ืชื• ืœื›ืœื™ ืจื‘ ืขื•ืฆืžื” ืขื‘ื•ืจ ื”ืžืคืชื—, ื•ืื•ืœื™ ืืคื™ืœื• ืœืžื”ื ื“ืก ื”ืชืคืขื•ืœ. ื‘ื•ืื• ืœื”ื›ื™ืจ ืืช ื”ืคืจื•ื™ืงื˜ ื•ื™ื›ื•ืœื•ืชื™ื•.

NB: ืื’ื‘, ื›ื‘ืจ ื“ื™ื‘ืจื ื• ื‘ืงืฆืจื” ืขืœ ืกืงืืคื•ืœื“ ื‘ื’ื ืจืœ ืฉืœื ื• ืกืงื™ืจื” ืฉืœ ื›ืœื™ ืžืคืชื—ื™ื, ืฉื—ื™ื™ื• ืงืฉื•ืจื™ื ืœ-Kubernetes.

ืชึตืื•ึนืจึดื™ึธื”. ืžื˜ืจื” ื•ื™ื›ื•ืœื•ืช

ืื–, ื‘ืื•ืคืŸ ื›ืœืœื™, Skaffold ืคื•ืชืจ ืืช ื”ื‘ืขื™ื” ืฉืœ ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืžื—ื–ื•ืจ ื”-CI/CD (ื‘ืฉืœื‘ื™ ื”ื‘ื ื™ื™ื”, ื”ื“ื—ื™ืคื”, ื”ืคืจื™ืกื”), ื•ืžืฆื™ืข ืœืžืคืชื— ืžืฉื•ื‘ ืžื”ื™ืจ, ื›ืœื•ืžืจ. ื”ื™ื›ื•ืœืช ืœืงื‘ืœ ื‘ืžื”ื™ืจื•ืช ืืช ื”ืชื•ืฆืื” ืฉืœ ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“ ื”ื‘ืื™ื - ื‘ืฆื•ืจื” ืฉืœ ืืคืœื™ืงืฆื™ื” ืžืขื•ื“ื›ื ืช ื”ืคื•ืขืœืช ื‘ืืฉื›ื•ืœ Kubernetes. ื•ื–ื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ื‘ืžืขื’ืœื™ื ืฉื•ื ื™ื (ืžืคืชื—, ืฉืœื‘, ื”ืคืงื”...), ืฉืขื‘ื•ืจื Skaffold ืขื•ื–ืจ ืœืชืืจ ืืช ื”ืฆื™ื ื•ืจื•ืช ื”ืžืชืื™ืžื™ื ืœื”ืคืฆื”.

ืงื•ื“ ื”ืžืงื•ืจ ืฉืœ Skaffold ื›ืชื•ื‘ ื‘-Go, ืžื•ืคืฅ ืขืœ ื™ื“ื™ ืชื—ืช ื”ืชื ืื™ื ืฉืœ ืจื™ืฉื™ื•ืŸ Apache ื”ื—ื™ื ืžื™ 2.0 (GitHub).

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืคื•ื ืงืฆื™ื•ืช ื•ื”ืชื›ื•ื ื•ืช ื”ืขื™ืงืจื™ื•ืช. ื”ืจืืฉื•ื ื™ื ื›ื•ืœืœื™ื ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

  • 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. ืœื”ืœืŸ ื–ืจื™ืžืช ืขื‘ื•ื“ื” ืœื“ื•ื’ืžื” ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘ื• (ืžืชื•ืš ืชื™ืขื•ื“ ื”ืคืจื•ื™ืงื˜):

ืกืงื™ืจื” ืฉืœ Skaffold ืขื‘ื•ืจ ืคื™ืชื•ื— Kubernetes

ืื™ืš ื ืจืื™ืช ื”ืขื‘ื•ื“ื” ืฉืœ ืกืงืคื•ืœื“ ื‘ืžื•ื ื—ื™ื ื›ืœืœื™ื™ื?

  1. ื›ืœื™ ื”ืฉื™ืจื•ืช ืขื•ืงื‘ ืื—ืจ ืฉื™ื ื•ื™ื™ื ื‘ืกืคืจื™ื™ืช ืงื•ื“ ื”ืžืงื•ืจ. ืื ื‘ื•ืฆืขื• ืฉื™ื ื•ื™ื™ื ื‘ืงื‘ืฆื™ื, ื”ื ืžืกื•ื ื›ืจื ื™ื ืขื ืชืจืžื™ืœ ื”ื™ื™ืฉื•ืžื™ื ื‘ืืฉื›ื•ืœ Kubernetes. ืื ืืคืฉืจ, ืžื‘ืœื™ ืœื”ืจื›ื™ื‘ ืืช ื”ืชืžื•ื ื” ืžื—ื“ืฉ. ืื—ืจืช, ืชืžื•ื ื” ื—ื“ืฉื” ืžื•ืจื›ื‘ืช.
  2. ื”ืชืžื•ื ื” ื”ืžื•ืจื›ื‘ืช ื ื‘ื“ืงืช ื‘ืืžืฆืขื•ืช container-structure-test, ืžืชื•ื™ื’ืช ื•ื ืฉืœื—ืช ืœ-Docker Registry.
  3. ืœืื—ืจ ืžื›ืŸ, ื”ืชืžื•ื ื” ื ืคืจืกืช - ืคืจื•ืกื” ื‘ืืฉื›ื•ืœ Kubernetes.
  4. ืื ื”ื”ืฉืงื” ืื•ืชื—ืœื” ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” skaffold dev, ืื– ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœืงื‘ืœ ื™ื•ืžื ื™ื ืžื”ืืคืœื™ืงืฆื™ื”, ื•-Skaffold ืžื—ื›ื” ืœืฉื™ื ื•ื™ื™ื ื›ื“ื™ ืœื—ื–ื•ืจ ืขืœ ื›ืœ ื”ืคืขื•ืœื•ืช ืฉื•ื‘.

ืกืงื™ืจื” ืฉืœ Skaffold ืขื‘ื•ืจ ืคื™ืชื•ื— Kubernetes
ืื™ื•ืจ ื”ืฉืœื‘ื™ื ื”ืขื™ืงืจื™ื™ื ืฉืœ ืคืขื•ืœืช ืกืงืคื•ืœื“

ืชืจื’ื•ืœ. ืžื ืกื” ืืช ืกืงืคื•ืœื“

ื›ื“ื™ ืœื”ื“ื’ื™ื ืืช ื”ืฉื™ืžื•ืฉ ื‘-Skafold, ืืงื— ื“ื•ื’ืžื” ืžืชื•ืš ืžืื’ืจ ืคืจื•ื™ืงื˜ื™ื ืฉืœ GitHub. ืื’ื‘ ืฉื ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช ืื—ืจื•ืช ืฉืœื•ืงื—ื•ืช ื‘ื—ืฉื‘ื•ืŸ ืคืจื˜ื™ื ืฉื•ื ื™ื. ืื ื™ ืื‘ืฆืข ืืช ื›ืœ ื”ืคืขื•ืœื•ืช ื‘ืื•ืคืŸ ืžืงื•ืžื™ ื‘ืžื™ื ื™ืงื•ื‘. ื”ื”ืชืงื ื” ืคืฉื•ื˜ื” ื•ืื•ืจื›ืช ืžืกืคืจ ื“ืงื•ืช, ื•ืชื–ื“ืงืง ืœ-kubectl ื›ื“ื™ ืœื”ืชื—ื™ืœ.

ื”ืชืงืŸ ืืช 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 ื‘ืขืช ื”ืจื›ื‘ื” ืžื—ื“ืฉ:

ืกืงื™ืจื” ืฉืœ Skaffold ืขื‘ื•ืจ ืคื™ืชื•ื— Kubernetes

ืจืืฉื™ืช, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื”ืžื˜ืžื•ืŸ ื ืžืฆื ื‘ืฉื™ืžื•ืฉ. ืœืื—ืจ ืžื›ืŸ, ื”ืืคืœื™ืงืฆื™ื” ืžื•ืจื›ื‘ืช, ื ืคืจืกืช ื•ื™ืฆื™ืื•ืช ืžื•ืขื‘ืจื•ืช. ืžืื– ืฉืฆื•ื™ืŸ --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, ืคืฉื•ื˜ ืœื ืขื•ืงื‘ ืื—ืจ ืฉื™ื ื•ื™ื™ื), ื‘ืืžืฆืขื•ืช ืชืฆื•ืจื” ืื—ืจืช.

ืขืœ ืงื˜ืงื•ื“ื” ื™ืฉ ืžึทื ื”ึดื™ื’ื•ึผืช ื–ื” ืืคื™ืœื• ื™ื•ืชืจ ืงืœ ืขื ื“ื•ื’ืžื”. ืื‘ืœ ื”ื•ื ืžืฆื™ืข ืืจื’ื– ื—ื•ืœ ืžื•ื›ืŸ ืขื Kubernetes, ืืคืœื™ืงืฆื™ื” ื•-Skaffold. ืืคืฉืจื•ืช ืžืฆื•ื™ื ืช ืื ืืชื” ืžืขื•ื ื™ื™ืŸ ืœื ืกื•ืช ืืช ื”ื™ืกื•ื“ื•ืช ืžืื•ื“ ื‘ืขืฆืžืš.

ืžืงืจื” ืฉื™ืžื•ืฉ ืืคืฉืจื™ ืื—ื“ ืขื‘ื•ืจ Skaffold ื”ื•ื ื‘ื™ืฆื•ืข ืคื™ืชื•ื— ืขืœ ืืฉื›ื•ืœ ืžืจื•ื—ืง. ืœื ืœื›ื•ืœื ื ื•ื— ืœื”ืคืขื™ืœ ืืช Minikube ืขืœ ื”ื—ื•ืžืจื” ืฉืœื•, ื•ืื– ืœื’ืœื’ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” ื•ืœืฆืคื•ืช ืฉื”ื™ื ืชืคืขืœ ื›ืจืื•ื™... ื‘ืžืงืจื” ื–ื”, Skaffold ืคื•ืชืจ ืืช ื”ื‘ืขื™ื” ื‘ืฆื•ืจื” ืžื•ืฉืœืžืช, ืžื” ืฉื ื™ืชืŸ ืœืืฉืจ, ืœืžืฉืœ, ืขืœ ื™ื“ื™ ืžื”ื ื“ืกื™ Reddit, ื›ืคื™ ืฉื™ืฉ ืœื ื• ื›ื‘ืจ ื“ื ื• ะฟะธัะฐะปะธ ื‘ื‘ืœื•ื’ ืฉืœื ื•.

ื•ื‘ ืคืจืกื•ื ื–ื” ืž-Weaveworks ืชื•ื›ืœื• ืœืžืฆื•ื ื“ื•ื’ืžื” ืœื™ืฆื™ืจืช ืฆื™ื ื•ืจ ืœื™ื™ืฆื•ืจ.

ืžืกืงื ื”

Skaffold ื”ื•ื ื›ืœื™ ื ื•ื— ืœื‘ื ื™ื™ืช ืฆื™ื ื•ืจื•ืช ื”ื›ื•ืœืœื™ื ื”ืคืขืœืช ื™ื™ืฉื•ืžื™ื ืœ-Kubernetes ื•ืžืชืžืงื“ื™ื ื‘ืขื™ืงืจ ื‘ืฆืจื›ื™ ืคื™ืชื•ื—. ื–ื” ืžืงืœ ืœืžื“ื™ ืขืœ ื™ืฆื™ืจืช ืฆื™ื ื•ืจ "ืงืฆืจ" ืฉืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืฆืจื›ื™ื ื”ื‘ืกื™ืกื™ื™ื ืฉืœ ื”ืžืคืชื—, ืืš ืื ืชืจืฆื”, ืืชื” ื™ื›ื•ืœ ืœืืจื’ืŸ ืชื”ืœื™ื›ื™ื ื’ื“ื•ืœื™ื ื™ื•ืชืจ. ื›ืื—ืช ื”ื“ื•ื’ืžืื•ืช ื”ื‘ืจื•ืจื•ืช ืœืฉื™ืžื•ืฉ ื‘-Skaffold ื‘ืชื”ืœื™ื›ื™ CI/CD ื ืชื•ืŸ ื›ื–ื” ืคืจื•ื™ืงื˜ ืžื‘ื—ืŸ ืžืชื•ืš 10 ืฉื™ืจื•ืชื™ ืžื™ืงืจื• ื”ืžืฉืชืžืฉื™ื ื‘ื™ื›ื•ืœื•ืช ืฉืœ Kubernetes, gRPC, Istio ื•-OpenCensus Tracing.

ืœ-Skaffold ื›ื‘ืจ ื™ืฉ ื›ืžืขื˜ 8000+ ื›ื•ื›ื‘ื™ื ื‘-GitHub, ืคื•ืชื—ื” ืขืœ ื™ื“ื™ ื’ื•ื’ืœ ื•ื”ื™ื ื—ืœืง ืžืžื ื” GoogleContainerTools - ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ืจื’ืข ื™ืฉ ืืช ื›ืœ ื”ืกื™ื‘ื•ืช ืœื”ืืžื™ืŸ ืฉื”ืคืจื•ื™ืงื˜ ื™ืชืคืชื— ื‘ืื•ืฉืจ ื•ืขื•ืฉืจ.

ื .ื‘.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”