27 ืืืื ืืืืื ืืืจืืื ืฉื ืื ืก DevOpsConf 2019, ืฉื ืขืจื ืืืกืืจืช ืืคืกืืืื
ืืื ืืืฆืืช, ืืฉืืจืืช ืฉืื ื (ืฉื ืืืข ืืขืืจ ื-dapp) ืืืืข ืืืื ืืจื ืืืกืืืจืืช ืฉื 1000 ืืืืืื ื-GitHub - ืื ื ืืงืืืื ืฉืงืืืืช ืืืฉืชืืฉืื ืืืืืืช ืืืืื ืชืืคืื ืืช ืืืืื ืืงืืื ืืืชืจ ืขืืืจ ืืื ืืกื DevOps ืจืืื.
ืื ืื ื ืืฆืืืื
ืืกืืจืช ืงืื ื-Kubernetes
ืืฉืืื ืื ืชืืื ืืืชืจ ืขื werf, ืืื ืขื CI/CD ื-Kubernetes, ืื ืฉืืจืื ืฉืืชืืื ื ืฉืื ื ืืจืืื ืืงืื ืืืื ืจืื ืฉื Docker (ืืืืจืชื ืขื ืื ื
ืืื ื ืจืื ืืฉืืื ื-Kubernetes?
- ืืฉ ืืืืจ Git ืขื ืืงืื ืืืืจืืืช ืืื ืืืชื. ืืืคืืืงืฆืื ืืืื ืืช ืืชืืื ืช Docker ืืืชืคืจืกืืช ื-Docker Registry.
- ืืืชื ืืืืจ ืืืื ืื ืืืจืืืช ืืืฆื ืืคืจืืก ืืืืคืขืื ืืช ืืืคืืืงืฆืื. ืืฉืื ืืคืจืืกื, ืื ืืืืช ืืื ื ืฉืืืืช ืื Kubernetes, ืฉืืงืืืช ืืช ืืชืืื ื ืืจืฆืืื ืืืจืืฉืื ืืืฉืืงื ืืืชื.
- ืื ืืกืฃ, ืืฉ ืืืจื ืืื ืืืืงืืช. ืืืง ืืืื ื ืืชื ืืขืฉืืช ืืขืช ืคืจืกืื ืชืืื ื. ืืชื ืืืื ืื (ืืขืงืืืช ืืืชื ืืืจืืืช) ืืคืจืืก ืขืืชืง ืฉื ืืืืฉืื (ืืืจืื ืฉืืืช ื ืคืจื ืฉื K8s ืื ืืืฉืืื ื ืคืจื) ืืืืจืืฅ ืฉื ืืืืงืืช.
- ืืืกืืฃ, ืืชื ืฆืจืื ืืขืจืืช CI ืฉืืงืืืช ืืืจืืขืื ื-Git (ืื ืืืืฆืืช ืขื ืืคืชืืจ) ืืงืืจืืช ืืื ืืฉืืืื ืืืืืขืืื: ืืื ืืช, ืืคืจืกื, ืืคืจืืก, ืืืืืง.
ืืฉ ืืื ืืื ืืขืจืืช ืืฉืืืืช:
- ืื ืืฉ ืื ื ืชืฉืชืืช ืืืชื ื ืืชื ืช ืืฉืื ืื (ืชืฉืชืืช ืืืชื ื ืืชื ืช ืืฉืื ืื), ืชืืื ืช ืืืคืืืงืฆืื ืืืฉืืฉืช ืืื ืืฉืืืื (ืืืืื, ืืคืงื ืืื'), ืืืื ืืืืืช ืืื. ืืืืจืชื ืขื ืื ืืืชืจ ืคืืจืื ืืขื ืืืืืืืช.
ืืื . - ืืืืืื ืฉืื ื ืขืืงืืื ืืืจ ืืชืฉืชืืช ืืืืฉืช ืงืื (IAC), ืงืื ืืืืฉืื, ืืืจืืืช ืืืจืืื ืืืืคืขืื ืฉืื ืฆืจืืืื ืืืืืช ืืืืืง ืืืืืจ ืืื. ืืืืืข ื ืืกืฃ ืขื ืื, ืจืื
ืืืชื ืืื . - ืฉืจืฉืจืช ืืฉืืืืื (ืึฐืกึดืืจึธื) ืืืจื ืืื ืื ืื ื ืจืืืื ืืช ืื ืื: ืืืคืืืงืฆืื ืืืจืืื, ื ืืืงื, ืฉืืืจืจื (ืฉืื ืืฉืืจืืจ) ืืืื - ืืืกืืจื ืืืฆืขื. ืืื ืืืฆืืืืช, ืืืฉืชืืฉ ืืงืื ืืช ืื ืฉืคืจืกืืช, ืื ืืื ืืฉืืกืจืช ืืช ืื ืืืืฆืืจ, ืืืฉืืื ืืื ืืกืืื ืืืืช ืืฉื ืืืืคืงื ืืื ืขืืื. ืื ืื ื ืืืืื ืฉืฉืจืฉืจืช ืืืฉืืืืื ืืกืชืืืืช ืจืง ืืฉืื ืืืืฆืขื (ืึธืจืึผืฅ), ืื ืืืชืจ ืืืืง, ืืคืืื ืืจืืข ืฉืื ืืงืื ืืืกืจ ืืืืืฆืืจ (ืืืืคืชื ืืืืฉ).
ืืื ื ืืืืจ ืืชืืื ืืช ืืืกืืจื ืืขืื ื-Kubernetes: ืืื ืืืืฆืื ืื ืจืง ืขื ืืืื ื, ืืื ืขื ืืื ืืืฉ ืื ืื ืฉืืืคื ืืืขืื ืื. ืืืขืฉื, ืืคืืก ืื ื ืงืจื ืืขืช GitOps (ืชืืืื ืืงืจืื ืขืื ืขื ืืืื ื ืืืจืขืืื ืืช ืืืืืจืื
ืฉืื ืื ืืื
ื ืจืื ืฉืืคืฉืจ ืืืืจ ืขื ืื ืืืช ืชืืื ืืช Docker ืืฉื ืช 2019, ืืฉืืืื ืืืืขืื ืืื ืืืชืื Dockerfiles ืืืืคืขืื docker build
?.. ืืืื ืื ืืืื ืกืื ืฉืืืืชื ืจืืฆื ืืฉืื ืื ืืืืื:
- ืืฉืงื ืชืืื ื ืืฉืื, ืื ืืฉืชืืฉ
ืจื ืฉืืืื ืืืฉืืืจ ืืชืืื ื ืจืง ืืช ืืืคืืืงืฆืื ืฉืืืืช ื ืืืฆื ืืคืขืืื. - ืืกืคืจ ืฉืืืืช ืืฉ ืืืืขืจ ืขื ืืื ืฉืืืื ืฉืจืฉืจืืืช ืฉื
RUN
-ืคืงืืืืช ืืคื ืืฉืืขืืช. - ืขื ืืืช, ืื ืืืกืืฃ ืืขืืืช ืืืชืืจ ืืืืื, ืื ืืืฉืจ ืืืืืื ืงืืจืก, ืืชื ืฆืจืื ืืืฆืื ืืช ืืคืงืืื ืื ืืื ื ืืืฉืจืฉืจืช ืฉืืจืื ืืืขืื.
- ืืืืจืืช ืืจืืื ืืฉืื ืื ืื ืื ื ืจืืฆืื ืืืคืขืื ืฉืื ืืืื ืืืืืจืืช ืืืจืืืช ืืช ืืชืืฆืืืช. ืืืืืื, ืืื ื ืจืืฆื ืืื ืืช ืืืืฉ ืชืืืช ืืกืคืจืืืช ืฉืคื ืืื ืคืขื ืฉืืชื ืืื ื ืืืฉืื.
- ืืขืชืื ืงืจืืืืช ืืืืืจ Git ืืื ืฉืืชื ืฆืจืื ืชืืื ืืช ืจืืืช, ืฉื ืืชื ืืคืชืืจ ืขื ืืื ืงืืืฆื ืฉื Dockerfiles (ืื ืฉืืืื ืขื ืฉื ืืงืืืฅ ืืื) ืืกืงืจืืคื Bash ืขื ืืืจืืื ืืจืฆืืคื ืฉืืื.
ืื ืืื ืจืง โโืงืฆื ืืงืจืืื ืฉืืืื ืืชืืืืืื ืืืชื. ืืื ืืฉ ืืขืืืช ืืืจืืช, ืืืืืื:
- ืืขืชืื ืงืจืืืืช ืืฉืื ืืืจืืื ืื ืื ื ืฆืจืืืื ืืฉืื ืืจ (ืืืืืื, ืฉืืืจ ืืช ืืชืืฆืื ืฉื ืคืงืืื ืืื apt ืืกืคืจืืื ืฉื ืฆื ืฉืืืฉื).
- ืื ืื ื ืจืืฆืื ืืืชื ืืคืฉืจื ืืืงืื ืืืชืื ืืืขืืคืช.
- ืื ืื ื ืจืืฆืื ืืื ืืช ืืื Docker (ืืื ืื ืื ื ืฆืจืืืื ืืืื ื ืืืจืืืืืืช ื ืืกืคืช ืฉืื ืื ืื ื ืฆืจืืืื ืืืืืืจ ืืื ืืฉืืื ืื, ืืฉืืืจ ืืฉ ืื ื ืืฉืืื Kubernetes ืฉืื ืื ืื ื ืืืืืื ืืืจืืฅ ืงืื ืืืื ืจืื?).
- ืืจืืื ืืงืืืื, ืฉื ืืชื ืืืืื ืืืจืืื ืฉืื ืืช: ืคืงืืืืช ืฉืื ืืช ืื- Dockerfile (ืื ื ืขืฉื ืฉืืืืฉ ืจื-ืฉืืื), ืืกืคืจ commits ืฉื ืืืชื ืืืืจ, ืืกืคืจ Dockerfile.
- ืืจืืื ืืืืืจืช: ืื ืื ื ืจืืฆืื ืืืกืืฃ ืืืจืื ืืชืจืืืืื ืฉืื "ืืื ืืื" ืืืื ืืืืืื ืฉืืื ื ืขืื, ืื ืฉืืืืจ ืฉืฆืจืื ืืืืกื ืืืชื ืืืคืฉืื ืื ืคืจื.
- ืืืกืืฃ, ืฆืืื ืชื ืืช ืคืกืืช ืืจืฆืื ืืช ืืืืืืืืื: ืื ืืืื ืืืืืืื ืืืืช ืืืืืจ, ืืืงืืื ืคืงืืื ืืืฉืื ืืืงืื ืชืืื ื ืืืื ื, ืืืจืืืช ืขื ืืื ื ืฉื ืืื ืืื ืืขืฉืืช ื ืืื. ืขื ืืืช, ืื ื ืืืฉืืช ืื ืืืื ืฉื ืืชื ืืฆืคืืช ืืช ืื ืื ืืืื ืกืื ืืืจื ืื.
ืืื ื ืืคืจืืืงืืื:
-
moby/buildkit - ืืื ื ื- Docker Inc (ืืืจ ืืฉืืื ืืืจืกืืืช ืื ืืืืืืช ืฉื Docker), ืฉืื ืกื ืืคืชืืจ ืืช ืื ืืืขืืืช ืืืื; -
ืงืื ืืงื - Builder ืืืืื ืืืืคืฉืจ ืืื ืืช ืืื Docker; -
Buildpacks.io - ืื ืืกืืื ืฉื CNCF ืืืฆืืจ ืงืกื ืืืืืืื ืืืืืืื ืคืชืจืื ืืขื ืืื ืขื ืืกืืก ืืืืฉ ืืฉืืืืช; - ืืขืื ืืืืจื ืฉื ืืื ืขืืจ ืืืจืื, ืืืื
ืืื ื ,genuinetools/img ...
...ืืชืจืื ืืื ืืืืืื ืืฉ ืืื ื-GitHub. ืืืืืจ, ืืฆื ืืื, docker build
ืงืืื ืืืืื ืืขืฉืืช ืืฉืื, ืืื ืืืฆืืืืช ืืืขืื ืื ื ืคืชืจื ืืืืืืื - ืืืืืื ืืื ืืื ืคืืชืื ืืงืืื ืฉื ืืกืคื ืื ืืืืจื ืืืืืื, ืฉืื ืืื ืืื ืคืืชืจ ืืืง ืืืืขืืืช.
ืืจืืื ืืืืจืฃ
ืื ืืืขื ื
ืืืขืืืช ืืืืฆืืืืช ืืืืื ืืืจ ืืืฉืื, ืืื ืืื ืืืงืืืื ื ืขืฉืชื ืืชืื ืืืชื ืืืจื, ืืืืขืืืช ืืืืืืฉืืช ืืฆืืื ืืชืืื ื ืืช ืืืกืชืืื ืขื ืกืืฃ ืืงืืฅ.
ืฉืื ืืคืจืกืื ืืจืืฉืื (ืคืจืกื)
ืืืืื ื docker push
... - ืื ืืืื ืืืืืช ืงืฉื ืืืขืืืช ืชืืื ื ืืจืืฉืื? ืืื ื ืฉืืืช ืืฉืืื: "ืืืื ืชื ืื ื ืฆืจืื ืืฉืื ืขื ืืชืืื ื?" ืื ื ืืืข ืืืกืืื ืฉืืฉ ืื ื Gitflow (ืื ืืกืืจืืืืืช Git ืืืจืช) ื-Kubernetes, ืืืชืขืฉืืื ืื ืกื ืืืืืื ืฉืื ืฉืงืืจื ื-Kubernetes ืืืื ืืขืงืืืช ืื ืฉืงืืจื ื-Git. ืืืจื ืืื, ืืื ืืื ืืงืืจ ืืืืช ืืืืื ืฉืื ื.
ืื ืื ืื ืงืฉื ืืื? ืืงืคืืื ืืฉืืืจ: ืืชืื ืืชืืืืืืช ืืืืช, ืฉืืื ืืืชื ืืฉืชื ื ืืืืขื (ืืืชื ื ืืชื ืืฉืื ืื), ืืชืืื ืช Docker, ืฉืืืืจื ืืืืฉืืจ ืืื.
ืื ืื ืืฉืื ืื ื ืืงืืืข ืืืฆื, ืื ืื ืื ื ืจืืฆืื ืืืืื ืืืืื commit ื ืื ืชื ืืืคืืืงืฆืื ืฉืคืืขืืช ื-Kubernetes (ืืื ื ืืื ืืขืฉืืช diffs ืืืืจืื ืืืืื).
ืืกืืจืืืืืช ืชืืื
ืืจืืฉืื ืคืฉืื ืชื git. ืืฉ ืื ื ืจืืฉืื ืขื ืชืืื ื ืืชืืืืช ื 1.0
. ื-Kubernetes ืืฉ ืืื ืืืคืงื, ืฉื ืืชืืื ื ืืื ืืืขืืืช. ื-Git ืื ืื ื ืขืืฉืื commits ืืืฉืื ืืกืืื ืื ืื ื ืืชืืืืื 2.0
. ืื ื ืืืกืคืื ืืืชื ืืคื ืืืืจืืืช ืืืืืืจ ืืื ืืืื ืืืชื ืืจืืฉืื ืขื ืืชื 2.0
. ืื ืื ื ืืืืืืื ืืช ืื ืืืื ืืื ืืื ืืกืืจ ืื ืืืคืงื.
ืืืขืื ืืืืฉื ืืื ืืื ืฉืงืืื ืื ืฉืื ื ืืช ืืชื, ืืจืง ืืืจ ืื ืืืงื ื ืืืืืื ื ืืืชื. ืืื? ืจืืฉืืช, ืื ืคืฉืื ืื ืืืืื ื: ืื ืื ื ืืืฆืืืื ืืจืกื ืฉื ืชืืื ื ืฉืืคืืื ืื ืืืงื ื ืขืืืื (ืื ืื ื ืื ืืืืืื ืืืจืช, ืื ืืื ืืืืืง, ืื ืื ื ืฆืจืืืื ืืฉืื ืชื). ืฉื ืืช, ื ืชืื ืื ืืื ื ืชืืื ื-Gitflow.
ืืืคืฉืจืืช ืืฉื ืืื ืืื git commit + ืชื. ืืกื ืืฃ ืืืืกืืจ ืืฉ ืชื 1.0
; ืขืืืจื ืืจืืฉืื - ืชืืื ื ืฉื ืคืจืกื ืืืืฆืืจ. ืื ืืกืฃ, ืืืฉืืื Kubernetes ืืฉ ืงืืื ืืชืืจ ืชืฆืืื ืืงืืืื ืืงืืื ืืชืืจ. ืืืืจ ืืื ืื ื ืขืืงืืื ืืืจ Gitflow: ืืขื ืฃ ืืจืืฉื ืืคืืชืื (develop
) ืื ื ืืืฆืจืื ืชืืื ืืช ืืืฉืืช, ืืืชืืฆืื ืืื ืืชืืฆืขืช commit ืขื ืืืืื #c1
. ืื ื ืืืกืคืื ืืืชื ืืืคืจืกืืื ืืืชื ืืจืืฉืื ืืืืฆืขืืช ืืืื ืื (#c1
). ืขื ืืืชื ืืืื ืื ื ืืชืืืืืื ืืชืฆืืื ืืงืืืื. ืื ืื ื ืขืืฉืื ืืช ืืืชื ืืืืจ ืขื ืืชืืืืืืืืช #c2
ะธ #c3
.
ืืฉืืื ื ืฉืืฉ ืืกืคืืง ืชืืื ืืช, ืื ืื ื ืืชืืืืื ืืืืฆื ืืื. ืฆืืจ ืกื ืืฃ ื-Git release_1.1
(ืขื ืืืกืืก #c3
ืฉื develop
). ืืื ืฆืืจื ืืืกืืฃ ืืช ืืืืืืจื ืืื, ืื... ืื ื ืขืฉื ืืฉืื ืืงืืื. ืืื, ืื ืื ื ืืืืืื ืคืฉืื ืืืืื ืืช ืื ืืืืืื. ืื ืื ื ืืชืงื ืื ืืืืื ืืคื ืื #c4
ืืืืืคื ืืืื ืืชืืืืืื ืืืืืื. ืืืงืืื, ืืคืืชืื ืืชืืฆืข ื develop
, ืฉืืื ื ื ืืงืืื ืฉืื ืืืื ืืขืช ืืขืช release_1.1
. ืืฉืื ืืกืืื, ืื ื ืืงืืืื comcompiled ืืืืขืื ื-Staging, ืฉืื ื ืืจืืฆืื ืืื ื (#c25
).
ืืืืจ ืืื ืื ื ืืืืืื (ืขื ืืจืฆื ืงืืืื) ืืช ืขื ืฃ ืืฉืืจืืจ (release_1.1
) ืืืืกืืจ. ืฉืื ื ืชื ืขื ืืืจืกื ืืืืฉื ื-commit ืืื (1.1
). ืืื ืืชืืื ื ืืื ืืืจ ื ืืกืคืช ืืจืืฉืื, ืื ืืื ืื ืืืกืืฃ ืืืชื ืฉืื, ืื ืื ื ืคืฉืื ืืืกืืคืื ืชื ืฉื ื ืืชืืื ื ืืงืืืืช (ืขืืฉืื ืืฉ ืื ืชืืืืช ืืจืืฉืื #c25
ะธ 1.1
). ืืืืจ ืืื, ืื ื ืืืืืืื ืืืชื ืืืืฆืืจ.
ืืฉ ืืืกืจืื ืฉืจืง ืชืืื ื ืืืช ืืืขืืืช ืืกืืืื'ืื ื (#c25
), ืืืืคืงื ืื ืงืฆืช ืฉืื ื (1.1
), ืืื ืื ืื ื ืืืืขืื ืฉ"ืคืืืืช" ืืื ืืืชื ืชืืื ื ืืืจืืฉืื.
ืืืืกืจืื ืืืืืชื ืืื ืฉืืื ืชืืืื ืืืชืืืืืืืืช ืืืืื, ืฆืจืื ืืขืฉืืช ื-Fast Forward.
ืื ืื ื ืืืืืื ืืืืช ืจืืืง ืืืชืจ ืืืขืฉืืช ืืจืืง... ืืืื ื ืกืชืื ืขื ืืืืื ืฉื Dockerfile ืคืฉืื:
FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb
FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public
ืืืื ื ืื ื ืืื ื ืงืืืฅ ืืคื ืืขืืงืจืื ืืื:
- SHA256 ืืืืืืื ืฉื ืืชืืื ืืช ืืฉืืืืฉ (
ruby:2.3
ะธnginx:alpine
), ืฉืื ืกืืืื ืืืงืืจืช ืฉื ืชืืื ื; - ืื ืืงืืืฆืืช (
RUN
,CMD
ืืืืื.); - SHA256 ืืงืืฆืื ืฉื ืืกืคื.
... ืืืงืืช ืืช ืืืืืงื (ืฉืื SHA256) ืืงืืืฅ ืืื. ืึถื ืึฒืชึดืืึธื ืื ืื ืฉืืืืืจ ืืช ืืชืืื ืฉื ืชืืื ืช Docker.
ื ืืืืจ ืืชืจืฉืื ื ืืืงืื commits ื ืฉืชืืฉ ืืืชืืืืช ืืืื, ืืืืืจ ืชืืืื ืชืืื ืืช ืขื ืืชืืืืช.
ืืขืช, ืืืฉืจ ืืฉ ืฆืืจื, ืืืฉื, ืืืื ืฉืื ืืืื ืืืจืกื ืืืืกืืจ, ื ืืื ืืืฆืข ืืืืื ืืืืชื: ืืืื ืืื ืืืื ืฉืื ื, ืืื ืืืชื ืืชืืื. ืขื ืืืชื ืืืื ื ืืืื ืืช ืืชืืื ื ืืืืฆืืจ.
ืืืืกืจืื ืืื ืฉืืขืช ืื ื ืืชื ืืืื ืืงืืืข ืืืื ืกืื ืฉื commit ื ืืืฃ ืืืืฆืืจ - ืกืืืืื ืฆ'ืง ืคืืขืืื ืจืง ืืืืืื ืืื. ืืขืื ืื ื ืคืชืจืช ืขื ืืื ืฉืืื ื ืืกืคืช ืขื ืืื ื ืชืื ืื - ืื ื ืืกืคืจ ืื ืืืชืจ ืืืืืจ ืืืชืจ.
ืชืืื ื-werf
ื-werf ืืืื ื ืืคืืื ืจืืืง ืืืชืจ ืืืชืืื ื ืื ืืขืฉืืช ืื ืืื ืืืืืจืช ืขื ืืืืื ืฉืืื ื ืืืืืกื ืืืืื ื ืืืช... ืื, ืื ืื ื ืืื ืื ืฉื ื ืกืืืื ืฉื ืชืืื ืืช Docker, ืื ืื ื ืงืืจืืื ืืื ืฉืื ะธ ืชืืื ื.
ืืืืจ werf Git ืืืืกื ืืืจืืืช ืกืคืฆืืคืืืช ืืื ืืื ืืืชืืจืืช ืืช ืืฉืืืื ืืฉืื ืื ืฉื ืืื ืืื (ืืคื ื ืืืชืงื ื, ืืืชืงืื, ืืคื ื ืืืืืจื, ืืชืงื ื). ืื ื ืืืกืคืื ืืช ืชืืื ืช ืืฉืื ืืจืืฉืื ืขื ืืชืืื ืืืืืืจืช ืืกืืื ืืืืืงื ืฉื ืืฉืืืื ืืจืืฉืื ืื. ืืืืจ ืืื ื ืืกืืฃ ืืช ืงืื ืืืงืืจ, ืืชืืื ืช ืืืื ืืืืฉื ืื ื ืืืฉืืื ืืช ื-checksum ืฉืื... ืคืขืืืืช ืืื ืืืืจืืช ืขื ืขืฆืื ืขืืืจ ืื ืืฉืืืื, ืืืชืืฆืื ืืื ืื ื ืืงืืืื ืกื ืฉื ืชืืื ืืช ืืื. ืืืืจ ืืื ืื ืื ื ืืืฆืจืื ืืช ืืชืืื ื ืืกืืคืืช, ืฉืืืืื ืื ืืื ื ืชืื ืื ืืืื ืืืงืืจ ืฉืื. ืืื ืื ื ืืชืืืืื ืืช ืืชืืื ื ืืื ืืืจืืื ืฉืื ืืช (ืคืจืืื ืืืืฉื).
ื ื ืื ืฉืืืจื ืื ืืืคืืข commit ืืืฉ ืฉืื ืจืง ืงืื ืืืคืืืงืฆืื ืฉืื ื. ืื ืืงืจื? ืืฉืื ืืื ืงืื, ืืืืืฆืจ ืชืืงืื ืืชืืื ืชืืื ืช ืืื ืืืฉื. ืืชืืืชื ืชืืงืืข ืืกืืื ืืืืืงื ืฉื ืชืืื ืช ืืืื ืืืฉื ื ืืืชืืงืื ืืืืฉ. ืชืืื ื ืกืืคืืช ืืืฉื ืชืืืืฆืจ ืืชืืื ื ืื. ืืชื ืืืืช ืืืื ืชืชืจืืฉ ืขื ืฉืื ืืืื ืืฉืืืื ืืืจืื.
ืืคืืื, ืชืืื ืืช ืืื ืื ืืืืื ืฉื ืืชื ืืืืกื ืืืคืฆื, ืืืชืืื ืืช ืฉืืืจ ื ืืฆืจื ืืื ื ืืืขืืืช ื-Docker Registry.
ื ืืงืื ืืจืืฉืื
ืื ืื ื ืื ืืืืจืื ืขื ืืืืงืช ืฉืืืืช ืฉื ืฉืืจื ืชืืืืืช ืืืืจ ืชืืืืช ืฉื ืืืงื - ืื ืชืืื ื ืกืื ืืจืืืช ืฉื Docker Registry ืขืฆืื. ืื ืื ื ืืืืจืื ืขื ืืฆื ืฉืื ืืฆืืืจืื ืืจืื ืชืืืืช Docker ืืื ืื ื ืืืื ืื ืฉืื ืื ื ืืืจ ืื ืฆืจืืืื ืืืง ืืื, ืืื ืื ืชืืคืกืื ืืงืื (ื/ืื ืื ืื ื ืืฉืืืื ืขื ืื).
ืืื ืืกืืจืืืืืช ืื ืืงืื?
- ืืชื ืคืฉืื ืื ืืืื ืืขืฉืืช ืืืื ืื ืื ืงืืช. ืืคืขืืื ืืืืช ืงื ืืืชืจ ืืฉืื ืงืฆืช ืขื ืฉืื ื ืืกืฃ ืืืฉืจ ืืคืจืื ืกืื ืขืฆืื ืฉื ืชืืื. ืืื ืื ืขืืื ืจืง ืขื ืื ืงืืื ืืกืืืืช.
- ืืืคืืก ืืื. ืื ืชืืืง ืืช ืื ืืชืืื ืืช ืืชืื ื ืืืืฉ ืจืง ืืช ืื ืืืืืืช ืืืขืจืืช ื-CI, ืขืืืื ืืืชืขืืจืจ ืืขืื. ืื ืืืืื ืืืคืขื ืืืืฉ ืืืคืงื, ืชืืขื ืขืืืจื ืชืืื ื ืืืฉื - ืืื ืฉืืจื ื ืืืงื ืขื ืืื ืืฃ ืืื. ืื ืืืจื ืืช ืืจืขืืื ืฉื ืชืฉืชืืช ืืืชื ื ืืชื ืช ืืฉืื ืื.
- ืืืื ืืจืืง. ืจืืฉืื ืืื ืืชืืื ืืขืืืช ืขื ืืืืชืื - ืื ืื ื ืืขืืื ืชืืื ืืช ืืืืจ. ืืืชื ืืขืื ืืื ืืฉืืื ืืงืืืืช: ืืืืื ืฉืื ืืคืฉืจ ืื ืงืืช ืืช ืืจืืฉืื ืฉืืื ืืขืืืช ืขื ืืืืชืื?
- ืืคื ืืืื. ืืืืืง ืืช ืื ืืชืืื ืืช ืื ืืช ืืืชืจ ืืืืืฉ? ืืื ืืืืื ืืืื ืฉืืจืืช ืฉืื ืขืืืื ืืืจ ืืืืฉ...
- ืืืืคื ืืื ื ืืงืืืข ืื ืืืจ ื ืืชื ืืืืืง.
ืืฉื ื ืฉืชื ืืคืฉืจืืืืช ืืขืฉืืืช ืืืืช: ืื ืื ืงืืช ืื ืฉืืืื ืฉื ืืืื-ืืจืืง + ืืื ื. ืืืงืจื ืืืืจืื, ืื ืื ื ืืืืจืื ืขื ืืืืจืื ืืืืื: ืืืฉืจ ืืชื ืืืื ืฉืืืืข ืืืื ืื ืงืืช ืืช ืืจืืฉืื, ืืชื ืืืฆืจ ืืื ืืืฉ ืืืืกืืฃ ืื ืืช ืื ืืชืืื ืืช ืืืืฉืืช ืืืืื, ืืืฉื, ืืืืฉ. ืืืืจื ืืืืฉ, ืจืื ืืืื ืคืืืื ื-Kubernetes ืขืืืื ืืฉืชืืฉืื ืืจืืฉืื ืืืฉื, ืืืขืืืจื ืื ืืืชื ืืจืืฉืื ืืืืฉ.
ืืื ืืืขื ื werf? ืื ืื ื ืืืกืคืื:
- Git head: ืื ืืชืืื, ืื ืืกื ืืคืื - ืืื ืื ืฉืื ืื ื ืฆืจืืืื ืืช ืื ืื ืฉืืชืืื ื-Git ืืชืืื ืืช (ืืื ืื, ืื ืฆืจืื ืืืืืง ืืช ืื ื-Git ืขืฆืื);
- ืื ืืชืจืืืืื ืฉื ืฉืืืื ืืขืช ืื Kubernetes;
- ReplicaSets ืืฉื ืื (ืื ืฉืฉืืืจืจ ืืืืจืื ื), ืืื ืื ื ืื ืืชืื ื ืื ืืกืจืืง ืืืืืจืืช ืฉื Helm ืืืืืืจ ืืช ืืชืืื ืืช ืืืืจืื ืืช ืฉื.
... ืืืขืฉืืช ืจืฉืืื ืืื ื ืืืกื ืืื - ืจืฉืืื ืฉื ืชืืื ืืช ืฉืื ื ืืืง. ืื ื ืื ืงืื ืืช ืื ืืฉืืจ, ืืืืืจ ืืื ืื ื ืืืฆืืื ืชืืื ืืช ืืื ืืชืืืืช ืืืืืงืื ืื ืืืชื.
ืฉืื ืืคืจืืกื
ืืฆืืจืืช ืืืื ื
ืื ืงืืื ืืจืืฉืื ื ืฉืืืื ืืจืฆืื ื ืืืฉืื ืืช ืชืฉืืืช ืืื ืืคืจืืกื ืืื ืืฉืงืช ืชืฆืืจืช ืืืฉืื ืืืขืืืื ืช, ืืืืฆืืจืช ืืืฆืืจื. ืืกืื YAML ืืืงืืจื ืืืชืืจ ืืช ืืฉืืื Kubernetes ืชืืื ืฉืื ื ืืืื ืืืชืืฆืื ืืคืืขืืช ืืคืืขื ืืืฉืืื. ืื Kubernetes ืืืกืืฃ ืืชืฆืืจื:
- ืืืืื;
- ืืืืข ืฉืืจืืช;
- ืขืจืื ืืจืืจืช ืืืื ืจืืื;
- ืงืืข ืขื ืกืืืืก ื ืืืื;
- ืฉืื ืืืื ืฉืืืฆืขื ืืืืง ื-webhook ืฉื ืงืืื;
- ืืชืืฆืื ืฉื ืขืืืืชื ืฉื ืืงืจืื ืฉืื ืื (ืืืืชืืื).
ืืื, ืืืฉืจ ืืืคืืขื ืชืฆืืจืช ืืฉืื ืืืฉื (ืืืฉ), ืื ืื ื ืื ืืืืืื ืคืฉืื ืืงืืช ืืืืจืืก ืืช ืืชืฆืืจื ืื ืืืืืช, ื"ืืื" ืืืชื (ืืืืืช). ืืฉื ืื ื ืฆืืจื ืืืฉืืืช ืืืฉ ืขื ืืชืฆืืจื ืฉืืืืื ืืืืจืื ื (ืืืื ืืืืจืื ื) ืืืืืืืื ืขื ืืืืืช ืงืืื ืชืืงืื.
ืืืฉื ืื ื ืงืจืืช ืืืืื ืื ืืืืื ื. ืืื ืืฉืืฉ, ืืืฉื, ืืืื.
ืืฉ ืื ืืืืื ืื ืืืืื ื, ืืฉืจ ืฉืื ื ืืื:
- ืืฉืืื ืืืื ืืืืจืื ื ะธ ืืืฉ, ืื ื ืืกืชืืืื ืขื ืื ืฉื ืืืง;
- ืืฉืืื ืืืฉ ะธ ืืืืืช, ืื ื ืืกืชืืืื ืขื ืื ืฉื ืืกืฃ ืื ืืฉืชื ื;
- ืืชืืงืื ืืืกืืื ืืืื ืขืืื ืืืืืช.
ืื ื ืคืืจืกืื ืืืชืจ ื-1000 ืืืฉืืืื ืขื Helm, ืื ืฉืื ื ืืืขืฉื ืืืื ืขื ืืืืื ืื-ืืืืื ื. ืขื ืืืช, ืืฉ ืื ืืกืคืจ ืืขืืืช ืฉืคืชืจื ื ืขื ืืชืืงืื ืื ืฉืื ื, ืฉืขืืืจืื ืืืื ืืขืืื ืืจืืื.
ืกืืืืก ืืฉืงื ืืืืชื
ืืืืจ ืฉืืขืจืืช ื-CI ืฉืื ื ืืืืฆืจืช ืชืฆืืจื ืืืฉื ืขืืืจ Kubernetes ืขื ืกืื ืืืืจืืข ืืื, ืืื ืืฉืืจืช ืืืชื ืืฉืืืืฉ (ืืืืืฉ ืืืขืืืืช) ืืืฉืืื - ืืืืฆืขืืช Helm or kubectl apply
. ืืืืจ ืืื, ืืชืจืืฉ ืืืืืื N-way ืฉืชืืืจ ืืืจ, ืฉืืืื ืืืื ื-API ืฉื Kubernetes ืืืืฉืืจ ืืืขืจืืช ื-CI, ืืื ืืืฉืชืืฉ ืฉืื.
ืขื ืืืช, ืืฉ ืืขืื ืขื ืงืืช: ืืืจื ืืื ืืืฉืื ืืืฆืื ืืื ื ืืืืจ ืืฉืงื ืืืฆืืืช. ืื Kubernetes ืืืื ืืืื ืฉืื ืืืื ืืฉ ืืืืื ืืืืฉื ืืืชื, ืื ืื ื ืขืืืื ืื ืืืืขืื ืื ืชืืื ืืชืืฆืื. ืืืืืื, ืขืืืื ืืืคืขืื ืืืืฉ ืฉื ืคืืืื ื-frontend ืขืฉืืืื ืืืฆืืื, ืื ืื ื-backend, ืืื ื ื ืงืื ืืจืกืืืช ืฉืื ืืช ืฉื ืชืืื ืืช ืืืคืืืงืฆืื ืืคืืขืืืช.
ืืื ืืขืฉืืช ืืื ื ืืื, ืกืืืื ืื ืืืจืฉืช ืงืืฉืืจ ื ืืกืฃ - ืืฉืฉ ืืืืื ืฉืืงืื ืืืืข ืกืืืืก ืื-API ืฉื Kubernetes ืืืฉืืจ ืืืชื ืื ืืชืื ื ืืกืฃ ืฉื ืืืฆื ืืืืืชื. ืืฆืจื ื ืกืคืจืืืช ืงืื ืคืชืื ื-Go -
ืืืชื ืืืืช ืฉื ืขืืงื ืื ืืจืืช werf ืืืืืจืช ืืืืฆืขืืช ืืขืจืืช ืืืืฆืืืช ืขื Deployments ืื StatefulSets. ืืขืจื ืจืืฉืืช - fail-mode
- ืืืื ืืช ืืืฉืืขืืืืช ืืืืืช:
-
IgnoreAndContinueDeployProcess
- ืื ื ืืชืขืืืื ืืืืขืืืช ืฉื ืืคืขืืช ืจืืื ืื ืืืืฉืืืื ืืคืจืืกื; -
FailWholeDeployProcessImmediately
- ืฉืืืื ืืจืืื ืื ืขืืฆืจืช ืืช ืชืืืื ืืคืจืืกื; -
HopeUntilEndOfDeployProcess
- ืื ื ืืงืืืื ืฉืืจืืื ืืื ืืขืืื ืขื ืกืืฃ ืืคืจืืกื.
ืืืืืื, ืืฉืืืื ืืื ืฉื ืืฉืืืื ืืขืจืื ืืขืจืืช fail-mode
:
ืืืฉืจ ืื ื ืคืืจืกืื ืืคืขื ืืจืืฉืื ื, ืืืชืื ืฉืืกืืก ืื ืชืื ืื (MongoDB) ืขืืืื ืื ืืืื - Deployments ืืืืฉืื. ืืื ืืชื ืืืื ืืืืืช ืืจืืข ืฉืื ืืชืืื, ืืืคืจืืกื ืขืืืื ืชืชืืฆืข.
ืืฉ ืขืื ืฉืชื ืืขืจืืช ืขืืืจ kubedog ื-werf:
-
failures-allowed-per-replica
- ืืกืคืจ ืื ืคืืืืช ืืืืชืจืืช ืขืืืจ ืื ืืขืชืง; -
show-logs-until
- ืืกืืืจ ืืช ืืจืืข ืฉืื werf ืืฆืื (ื-stdout) ืืืื ืื ืืื ืืชืจืืืืื ืืืืืืืืื. ืืจืืจืช ืืืืื ืืืPodIsReady
(ืืื ืืืชืขืื ืืืืืขืืช ืฉืื ืื ื ืื ืจืื ืื ืจืืฆืื ืืฉืืชื ืืขื ืืชืืืื ืืืืืข ืืคืื), ืืื ืืขืจืืื ืชืงืคืื ืื:ControllerIsReady
ะธEndOfDeploy
.
ืื ืขืื ืื ืื ื ืจืืฆืื ืืืคืจืืกื?
ืื ืืกืฃ ืืฉืชื ืื ืงืืืืช ืฉืืืจ ืชืืืจื, ื ืจืฆื:
- ืืจืืืช ืืืื ืื - ืืจืง ืื ืืืฆืื, ืืื ืืื ืืจืฆืฃ;
- ืืกืืื ืืชืงืืืืช, ืื ืื ืืขืืืื ืชืืืื "ืืฉืงื" ืืืกืคืจ ืืงืืช, ืืฉืื ืืืืื ืื ืงืืจื ืฉื;
- ืืฉ ืืืืจื ืืืืืืืืช ืืืงืจื ืฉืืฉืื ืืฉืชืืฉ (ืืืื ืื ืงืจืืื ืืืขืช ืืช ืืืฆื ืืืืืชื ืฉื ืืคืจืืกื). ืืคืจืืกื ืืืืืช ืืืืืช ืืืืืืช: ืื ืฉืืื ืขืืืจืช ืขื ืืกืืฃ, ืื ืฉืืื ืืืืจ ืืืฆืื ืืงืืื.
ืชืืฆืืืช ืฉื
ืขืืืจื ื ืืืืจื, ืืื ืืืืฉื ืืช ืื ืื ืืืื ืกืื ืืืชืืืจืื ืืฉืืื ืืกืคืงื โโืฉืื ืื (ืื ืืื, ืคืจืกืื, ืคืจืืกื), ืืขืจืืช CI ืืืื ืขืืจ ืืกืคืืงืื
ืืืงืื ืืกืงื ื:
ืืขืืจืช werf, ืืชืงืืื ื ืืืื ืืคืชืจืื ืืกืคืจ ืจื ืฉื ืืขืืืช ืขืืืจ ืืื ืืกื DevOps ืื ืฉืื ืื ืืงืืืื ืืจืืื ืืืชืจ ืืคืืืช ืชื ืกื ืืช ืืื ืืฉืืจืืช ืืื ืืคืขืืื. ืืืื ืงื ืืืชืจ ืืืืืข ืืชืืฆืื ืืืื ืืืื.
ืกืจืืื ืื ืืฉืงืืคืืืช
ืกืจืืื ืืืืืคืขื (~47 ืืงืืช):
ืืฆืืช ืืื"ื:
ื .ื.
ืืืืืืื ื ืืกืคืื ืขื Kubernetes ืืืืื ืฉืื ื:
- ยซ
ืงื ื ืืืื ืืืืืืื ืื ืืืื ืืฉืืืื ื- Kubernetes ยป (ืืืืืจื ืกืืืืืืจืื; 27 ืืืคืจืื 2019 ื"ืฉืืืชื"); - ยซ
ืืจืืื ืืืฉืืื ืฉื Kubernetes ยป (ืื ืืจืื ืคืืืืืื; 8 ืืืคืจืื 2019 ื-Saint HighLoad++); - ยซ
ืืกืื ื ืชืื ืื ื-Kubernetes ยป (ืืืืืจื ืกืืืืืืจืื; 8 ืื ืืืืืจ 2018 ื-HighLoad++); - ยซ
ื ืืืืจ ื-Kubernetes ยป (ืืืืืจื ืกืืืืืืจืื; 28 ืืืื 2018 ื-RootConf); - ยซ
ืฉืืืืช ืขืืืื ืืืืืฆืืช ื-CI/CD ืขื Kubernetes ื-GitLab ยป (ืืืืืจื ืกืืืืืืจืื; 7 ืื ืืืืืจ 2017 ื-HighLoad++); - ยซ
ืื ืืกืืื ืฉืื ื ืขื Kubernetes ืืคืจืืืงืืื ืงืื ืื ยป (ืืืืืจื ืกืืืืืืจืื; 6 ืืืื ื 2017 ื-RootConf).
ืืงืืจ: www.habr.com