áá±á 27 áááºáá±á·ááœáẠááœá²áá±á¬áºááá
áºá
áááºáá
áºááá¯ááºážá¡ááŒá
Ạáá»ááºážáááá·áº DevOpsConf 2019 áá®áá¬áá¶á
áááºááŒáá»áááºááŸá áá áá»áœááºá¯ááºááá¯á·á á¡áá¯á¶ážáááºááŸá¯ (áááẠdapp áá¯áá±á«áºáááº) ááẠáááá¯ááºážáááºááŸááºááá¯ááºáá áºáá¯ááá¯á· áá±á¬ááºááŸáááœá¬ážááŒá®ááŒá áºáááºá GitHub ááœáẠááŒáẠáááá â DevOps á¡ááºáá»ááºáá®áá¬áá»á¬ážá áœá¬á¡ááœáẠáááºážá ááŒá®ážááœá¬ážáá¬áá±áá±á¬ áá¯á¶ážá áœá²áá°á¡ááá¯ááºážá¡ááá¯ááºážááẠááááᯠááá¯ááá¯ááœááºáá°áá¬á á±ááẠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
áá®áá±á¬á· ááááºáááºáá±ážáá«áá
á±
áá¯ááºááᯠKubernetes ááá¯á· áá±ážááá¯á·ááŒááºážá
áá±á¬ááŒá±á¬áá»ááºááẠwerf á¡ááŒá±á¬ááºážááá¯ááºáá±á¬á·áá² Kubernetes ááŸá CI/CD á¡ááŒá±á¬ááºážá áá»áœááºá¯ááºááá¯á·ááá±á¬á·ááºáá²ááºááᯠDocker ááœááºááááºáá¬áá»á¬ážááœáẠáá¯ááºááá¯ážáá¬ážááŒá±á¬ááºáž ááá¯ááá¯ááẠ(áá®á¡ááŒá±á¬ááºážááᯠáá»áœááºáá±á¬áºááŒá±á¬áá²á·áááºá
Kubernetes ááœáẠáá±ážááá¯á·ááŸá¯áá¯á¶á á¶á áááºááá¯á·ááŸáááááºážá
- áááºážááá¯áááºáá±á¬ááºáááºá¡ááœááºáá¯ááºááŸáá·áºáááºážááœáŸááºáá»ááºáá»á¬ážáá«ááŸááá±á¬ Git repository áá áºáá¯ááŸááááºá á¡ááá®áá±ážááŸááºážááᯠDocker áá¯á¶ááœááºáááºáá±á¬ááºáá¬ážááŒá®áž Docker Registry ááœááºáá¯ááºáá±áá¬ážáááºá
- á¡áá¬ážáá° ááá¯ááŸá±á¬ááºáá¯á¶ááœáẠá¡ááá®áá±ážááŸááºážááᯠá¡áá¯á¶ážáá»áá¯á¶ááŸáá·áº áááºáááºáá¯á¶ááá¯ááºáᬠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážáááºáž áá«ááŸááááºá á¡áá¯á¶ážáá»ááŸá¯á¡ááá·áºááœááºá á€ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááŸááºáá¯á¶áááºááŒááºážá០á¡ááá¯ááŸááá±á¬áá¯á¶ááᯠáááºáá¶áááŸáááŒá®áž áááºážááᯠá áááºááá·áº Kubernetes ááá¯á· áá±ážááá¯á·áá«áááºá
- ááá¯á·á¡ááŒááºá áá»á¬ážáá±á¬á¡á¬ážááŒáá·áºá ááºážáááºááŸá¯áá»á¬ážááŸááááºá áá¯á¶áá áºáá¯á¶ááᯠááœáŸáá·áºáááºááá·áºá¡áá« á¡áá»áá¯á·á áá¯ááºáá±á¬ááºááá¯ááºáááºá áááºááẠ(áá°áá®áá±á¬ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááá¯ááºáž) á¡ááá®áá±ážááŸááºážááááá¹áá°ááᯠ(áá®ážááŒá¬áž K8s namespace ááá¯á·ááá¯áẠáá®ážááŒá¬ážá¡á á¯á¡áá±ážáá áºáá¯ááœááº) á¡áá¯á¶ážáá»ááŒá®áž ááá¯áá±áá¬ááœáẠá ááºážáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááºá
- áá±á¬ááºáá¯á¶ážááœááºá áááºááẠGit (ááá¯á·ááá¯áẠááá¯ááºááŸáááºááŒááºáž) á០á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠáááºáá¶áááŸáááŒá®áž áááºááŸááºáá¬ážáá±á¬ á¡ááá·áºá¡á¬ážáá¯á¶ážááᯠáá±á«áºáááº- áááºáá±á¬ááºááŒááºážá áá¯ááºáá±ááŒááºážá ááŒáá·áºáá»ááºááŒááºážá á ááºážáááºááŒááºážááá¯á·ááᯠáá±á«áºááá¯áá±á¬ CI á áá áºáá áºáᯠááá¯á¡ááºáá«áááºá
á€áá±áá¬ááœáẠá¡áá±ážááŒá®ážáá±á¬ ááŸááºáá»ááºá¡áá»áá¯á·ááŸááá«áááºá
- áá¬ááŒá±á¬áá·áºáá²ááá¯áá±á¬á· áá»áœááºáá±á¬áºááá¯á·ááŸá¬ áááŒá±á¬ááºážáá²ááá¯ááºáá²á· á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááœá± ááŸááááºá (áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ)á¡ááá·áºá¡á¬ážáá¯á¶ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áº á¡ááá®áá±ážááŸááºážáá¯á¶ (áá¬ááºááœáŸááºážá áá¯ááºáá¯ááºáá±áž á
áááº)á áá
áºáá¯ááŸáááááºá. áá®á¡ááŒá±á¬ááºážááœá±ááᯠá¡áá±ážá
áááºáá²á· á¥ááá¬ááœá±áá²á· ááŒá±á¬ááŒáá²á·áááºá
áá®ááŸá¬ . - áá¬ááŒá±á¬áá·áºáá²ááá¯áá±á¬á· áá»áœááºáá±á¬áºááá¯á·á á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáá¯ááºáá»ááºážáááºááŸá¯á¡ááá¯ááºáž ááá¯ááºáá¬áááºá (IaC)á¡ááá®áá±ážááŸááºážáá¯ááºá áááºáááºááŒááºážááŸáá·áº á
áááºááŒááºážá¡ááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬áž ááŒá
áºááá·áºáááºá repository áá
áºáá¯áá²ááŸá¬ á¡ááá¡áá». á€á¡ááŒá±á¬ááºážááá¯ááá¯ááááŸáááá¯áá«á ááŒáá·áºáá«á
áá°áá®áá±á¬á¡á á®áááºáá¶á ᬠ. - Delivery chain (ááá¯á·áá±á¬ááºááŸá¯) áá»áœááºá¯ááºááá¯á· á€áá²á·ááá¯á· ááŒááºáá±á·ááŸááááº- áá»áŸá±á¬ááºááœáŸá¬ááᯠá á¯á ááºážááŒá®áž á ááºážáááºá áá¯ááºáá±áá²á·áááºá (ááœáŸááºââáá±á¬áºâá¡ááá·áºâ) áá«áá«áá² - áá±ážááá¯á·ááŸá¯ ááŒá áºáá±á«áºáá¬áá«ááŒá®á áá«áá±ááá·áº áááºááœá±á·ááŸá¬áá±á¬á· áá¯á¶ážá áœá²áá°á áááºáá¯ááºááá¯ááºáá²á·á¡áá¬ááᯠáááŸáááŒá®ážá ááá¯áẠá¡á²áá«ááᯠáá¯ááºáá¯ááºáá±ážáá® á¡ááºááá¯ááºáá²á·á¡áá«á áá°á á¡á²áá®ááᯠááœá¬ážááŒá®ážáá±á¬á· áá®áá¯ááºáá¯ááºááŸá¯á á¡áá¯ááºááŒá áºááœá¬ážáááºá áá«ááŒá±á¬áá·áº ááá¯á·áá±á¬ááºáá±ážááœááºážááẠááŒá®ážáá¯á¶ážáááºááá¯á· áá¯á¶ááŒááºáá«áááºá áááºáááºááŸá¯á¡ááá·áºááœááºáᬠ(ááŒá±áž)áá¯ááºááᯠáá¯ááºáá¯ááºááŒááºážá០áááºááŸá¬ážááá¯ááºááá·áºá¡áá»áááºááœááºááẠ(áááºážááᯠá¡áá áºáá áºáá¯ááŒáá·áº á¡á á¬ážááá¯ážááŒááºáž) ááá¯á·ááá¯áẠááá¯á·áááºááá¯á á¡ááá¡áá»áááºá
Kubernetes ááœáẠá¡áááºáá±á¬áºááŒáá« áá±ážááá¯á·ááŸá¯á¡á
á®á¡á
ááºááá¯á· ááŒááºááœá¬ážááŒáá«á
áá¯á·- áááºážááᯠáá»áœááºá¯ááºááá¯á·áá¬ááá á€ááŒá¿áá¬ááᯠááá¯ááºááœááºááŒá±ááŸááºážáá°ááá¯ááºážááŸáááºáž á
á¬áá¬ážá¡á áá®ááœááºáá²á·ááŒááºážááŒá
áºáááºá ááááºáá±á¬á· áá®áá¯á¶á
á¶ááᯠá¡áᯠGitOps ááá¯á·áá±á«áºáá«áááºá (á¡áá±á«áºá¡áá±á«áºááŸáá·áº áááºážáá±á¬ááºááœááºááŸá á¡áá°á¡ááá»á¬ážá¡ááŒá±á¬ááºáž ááá¯ááá¯áááºááŸá¯ááá¯ááºáá«áááºá
á ááºááŒáá·áºáááºáá±á¬ááºáá«á
Dockerfiles ááá¯áááºáá²á·ááá¯á·áá±ážááŒá®áž run ááááºááá¯áá°ááá¯ááºážáááá±á¬á¡áá« 2019 áá¯ááŸá
áºááœáẠDocker áá¯á¶áá»á¬ážáááºáá±á¬ááºááŒááºážá¡ááŒá±á¬ááºážááŒá±á¬ááá¯ááºáá¯á¶ááááºá docker build
?.. á€ááœáẠáá»áœááºá¯ááºá¡á¬áá¯á¶á
áá¯ááºááá¯áá±á¬ ááœá²ááŒá¬ážáá»ááºáá»á¬ážááŸá¬-
- áá¯á¶á¡áá±ážáá»ááẠá¡áá±ážááŒá®ážáá¬ááá¯á· áá¯á¶ážáá«á
multi-stage áá¯ááºáá±á¬ááºáá»ááºá¡ááœáẠá¡ááŸááºááááºááá¯á¡ááºáá±á¬ á¡ááºááá®áá±ážááŸááºážááá¯áᬠáá¯á¶ááœááºáá¬ážáá²á·áá«á - á¡ááœáŸá¬á¡áá±á¡ááœáẠááœááºážáááºáá»á¬ážááá±á«ááºážá
ááºááŒááºážááŒáá·áº minimize áá¯ááºááá«áááºá
RUN
- á¡áááá¹áá«ááºá¡á á¡áááá·áºáá±ážáááºá - ááá¯á·áá±á¬áºá á€á¡áá¬áááºááŒá¿áá¬áá»á¬ážááá¯áááºáá±á¬ááºážáááºá á¡ááŸá¬ážááŸá¬ááŒááºážáá¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á ááºážáá±ážááœá²áá»ááºááœá¬ážáá±á¬á¡áá« ááŒá¿áá¬ááŒá áºá á±áá±á¬ ááœááºážáááºá០ááŸááºáááºáá±á¬á¡áááá·áºááᯠáááºááŸá¬ááœá±ááááºááŒá áºáááºá
- á á¯áá±ážááŸá¯á¡ááŸááẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡ááŒááºáá¯ááºááŒá®áž ááááºáá»á¬ážááᯠááŒááºááá¯áá±á¬ááŒá±á¬áá·áº á¡áá±ážááŒá®ážáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠá¡ááá®áá±ážááŸááºážáá áºáá¯áááºáá±á¬ááºááá·áºá¡áá«ááá¯ááºáž áá¬áá¬á áá¬ážá á¬ááŒáá·áºááá¯ááºáá»á¬ážááœáẠááŸá®ááá¯ááŸá¯ááᯠááŒááºáááºáááºáá±á¬ááºááá¯ááŒááºážáááŸááá«á
- áááºááá¯á¡ááºáá±á¬ Git repository áá áºáá¯ááŸáááŒá¬áá áá¯á¶áá»á¬ážá áœá¬Dockerfiles á¡á á¯á¡áá±áž (ááá¯á·ááá¯áẠááá¯ááºáá áºáá¯ááœáẠá¡ááá·áºáá»á¬ážáᯠá¡áááºáá±ážáá¬ážááá·áº) ááŸáá·áº áááºážááá¯á·á ááá·áºáá² á á¯áá±ážááŸá¯ááŸáá·áºá¡áá° Bash script ááŒáá·áº ááŒá±ááŸááºážááá¯ááºáááºá
á€áááºááŸá¬ áá°ááá¯ááºážáááºááá¯ááºáááá·áº áá±áá²áá±á¬ááºáá¡á áœááºá¡áá»á¬ážááŒá áºáááºá áá«áá±ááá·áº á¡áá°ážáááŒáá·áº áááŒá¬ážááŒá¿áá¬ááœá± ááŸááá«áá±ážáááºá
- ááááááºá ááºááŒáá·áºááŸá¬ áá áºáá¯áá¯ááá¯á¡ááºáá±áááºáááºá áá±á¬ááºáá±á«áº (á¥ááá¬á apt áá²á·ááá¯á· command áááááºááᯠthird-party directory ááœáẠcache)á
- ááá¯áá»ááºáááºá ááŒááºáááá°áž shell ááŸá¬áá±ážááá·áºá¡á á¬áž
- ááá¯áá»ááºáááºá Docker ááá«áá²áááºáá±á¬ááºáá«á (áá»áœááºá¯ááºááá¯á·ááẠááœááºááááºáá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº Kubernetes á¡á á¯á¡áá±ážáá áºáᯠááŸáááŸáá·áºááŒá®ážáá±á¬á¡áá«á áááºážá¡ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠá á®á ááºáááºááŸááºááẠááá¯á¡ááºááá·áº áá±á¬ááºááẠvirtual machine áá áºáᯠááá¯á¡ááºááááºážá)
- ááŒáá¯ááºáá° á á¯áá±ážááá°áá®áá±á¬áááºážáááºážáá»á¬ážááŒáá·áº áá¬ážáááºááá¯ááºáááº- Dockerfile á០ááá°áá®áá±á¬ command áá»á¬áž (á¡ááá·áºáá»á¬ážá áœá¬ááá¯á¡áá¯á¶ážááŒá¯áá«á)á áá°áá®áá±á¬ repository á commits áá»á¬ážá áœá¬á Dockerfiles áá»á¬ážá áœá¬á
- ááŒáá·áºáá»á®áá±áž: "ááááºá¹á" ááŒá áºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬ááá¹áá¯áá»á¬ážááᯠá á¯áá±á¬ááºážááá¯áá«áááºá áááºážááá¯á·á cache áá»á±á¬ááºááœá¬ážáááºá ááá¯ááá¯áááºááŸá¬ áááºážááᯠáá®ážááŒá¬ážáá áºáá±áá¬ááœáẠááááºážáááºážáá¬ážááẠááá¯á¡ááºáááºá
- áá±á¬ááºáá¯á¶ážáá±á¬á· ááá¯á¡ááºááá¹ááá²á· á¡ááœááºá¡ááááºááá¯á· áá±á«áºáááºá á¡á±á¬áºááá¯áááºáá áº: repository ááá¯ááœá¬ážááŒá®ážá command áá áºáá»áá¯á·ááá¯ááá¯ááºááŒá®áž á¡áááºááá·áºáá¯ááºáá¬ážáá²á·áá¯á¶ááá¯ááá°áá«á áááºááá¯áá¯ááºááááºááá¯áá¬ááᯠááŸááºáááºá áœá¬áá¬ážáááºááá±á¬áá±á«ááºá¡á±á¬áẠá á¯á ááºážáá¬ážáᬠá¡áá±á¬ááºážáá¯á¶ážáá«áá²á ááá¯á·áá±á¬áºá ááœá²ááŒá¬ážáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá€áááºážááŒáá·áº ááŒáá¯ááŒááºááá¯ááºáááºáᯠáá»áœááºá¯ááºááá¯ááºááá¯ááºááẠááá±áá»á¬áá«á
á€áááºááŸá¬ ááá±á¬áá»ááºáá»á¬ážááŒá áºáááº-
-
moby/buildkit â Docker Inc á០áááºáá±á¬ááºáá° (Docker á áááºááŸááá¬ážááŸááºážáá»á¬ážááá¯á· áá±á«ááºážá ááºáá¬ážááŒá®áž) á០á€ááŒá¿áá¬á¡á¬ážáá¯á¶ážááᯠááŒá±ááŸááºážááẠááŒáá¯ážá á¬ážáá±áá«áááºá -
áá¬áá®ááᯠâ Docker ááá«áá² áááºáá±á¬ááºááœáá·áºááŒá¯áá±á¬ Google á០áááºáá±á¬ááºáá°á -
Buildpacks.io â CNCF á á¡ááá¯á¡áá»á±á¬áẠááŸá±á¬áºááá¬ááᯠáááºáá®ážááẠááŒáá¯ážáááºážááŸá¯ ááŸáá·áº á¡áá°ážáááŒáá·áº á¡ááœáŸá¬áá»á¬ážá¡ááœáẠááŒááºááẠá¡ááŒá±á áá¯ááºááŒááºáž áá«áááºáá±á¬ á áááºáááºá á¬ážááœáẠááŒá±ááŸááºážáá»áẠá - ááŸáá·áº á¡ááŒá¬ážáá±á¬ á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬ážááŒá
áºáá±á¬á
á ,á á áºááŸááºáá±á¬áá°ážááºáá»á¬áž/img ...
... GitHub ááœáẠáááºážááá¯á· ááŒááºáááºáá»áŸááŸááááºááᯠááŒáá·áºáá«á á¡á²áá«ááá±á¬á· ááááºá docker build
áááºááŸáááŒá®áž áá
áºáá¯áá¯ááᯠáá¯ááºááá¯ááºáá±ááá·áº áááºááœá±á·ááŸá¬áá±á¬á· ááŒá¿áá¬ááᯠáá¯á¶ážá áááŒá±ááŸááºážááá¯ááºáá«á - á€á¡áá»ááºááẠááŒá¿áá¬áá»á¬ážá á¡á
áááºá¡ááá¯ááºážáá
áºáá¯á
á®ááᯠááŒá±ááŸááºážáá±ážááá·áº á¡á
á¬ážááá¯ážá
á¯áá±á¬ááºážáá°áá»á¬ážá á¡ááŒáá¯ááºááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááŒá
áºááŒá±á¬ááºáž áááºáá±ááŒáá«áááºá
werf ááœááºá ááºážáá±ážááœá²
áá®áá±á¬á· áá»áœááºáá±á¬áºááá¯á· ááá²á·áá«áááºá
á¡ááŒá¬áá±á¬áẠá¡ááááºááŒááá·áº ááŒá¿áá¬áá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážááŒá
áºáááºá á¡ááŒáá¯ááºáááºáá±á¬ááºááŸá¯ááᯠáá°áá®áá±á¬á¡áááºááŸááºá¡ááœááºážááœáẠáá¯ááºáá±á¬ááºáá²á·ááŒá®áž á¡áá«áá±á¬ááºááŒáá·áº áá®ážáá±á¬ááºážááá¯ážááŒáá¬ážááá·áº ááŒá¿áá¬áá»á¬ážááᯠááœá±áá¬áá®á¡áá¯ááºááœáẠá¡ááŒá®ážáááºááẠá
á®á
ááºáá¬ážáááºá
ááŸááºáá¯á¶áááºááŒááºážááœáẠáá¯ááºáá±ááŒááºážá¡ááá·áº (áá¯ááºáá±ááŒááºáž)
áá«ááá¯á·áá¯ááºážáá±á«áºáááºá docker push
... - Registry ááœáẠáá¯á¶áá
áºáá¯á¶ááᯠá¡ááºáá¯ááºáááºááŒááºážá¡ááœáẠáá¬á¡áááºá¡áá²ááŸáááá¯ááºááá²á ááá¯á·áá±á¬áẠáá±ážááœááºážáá±á«áºáá¬áááºâ âáá¯á¶áá±á«áºááœáẠáᬠtag áá¬ážááááºáááºážá á¡á²áá«á áá«ááá¯á·ááŸá¬ ááŸáááá¯á· ááŒá
áºáá±á«áºáá¬áá¬á Gitflow (ááá¯á·ááá¯áẠá¡ááŒá¬áž Git áááºážáá»á°áá¬) ááŸáá·áº Kubernetes ááŸáá·áº Kubernetes ááœáẠááŒá
áºáá»ááºáá±ááá·áºá¡áá¬áá»á¬ážááẠGit ááœááºááŒá
áºáá»ááºáá±ááá·áºá¡áá¬áá»á¬ážááᯠááá¯ááºáá¬ááŒá±á¬ááºáž áá±áá»á¬á
á±ááẠá
ááºááŸá¯áá¯ááºáááºážá ááŒáá¯ážá
á¬ážáá±áá«áááºá áá±á¬ááºáá¯á¶ážááœááºá Git ááẠáá»áœááºá¯ááºááá¯á·ááá
áºáá¯áááºážáá±á¬á¡ááŸááºááá¬ážá¡áááºážá¡ááŒá
áºááŒá
áºáááºá
áá®á¡ááœáẠáá¬á¡áááºá¡áá²ááŸáááá¯á·áá²á áá»áá¯ážááœá¬ážááá¯ááºá áœááºážáá±áá»á¬áá«á á±á: ááá¬áááœáẠáááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ Git ááŸá ááááá áºáá¯á០(áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬)á¡áá°áá°áá¬ážááá·áºááá·áº Docker áá¯á¶áá áºáá¯ááá¯á·á
áá»áœááºá¯ááºááá¯á·á¡ááœááºáááºáž á¡áá±ážááŒá®ážáá«áááºá áá¬á áºááŒá áºááá¯áá¯á¶ážááŒááºáá«áKubernetes ááœáẠáá¯ááºáá±á¬ááºáá±ááá·áº á¡ááá®áá±ážááŸááºážááᯠáááºááá·áºáááááááºááŒá¯áá¬ážáááºááᯠáá»áœááºá¯ááºááá¯á· áá¬ážáááºááá¯áá±á¬ááŒá±á¬áá·áºááŒá áºááẠ(ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááŸáá·áº á¡áá¬ážáá°á¡áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºáááº)á
Tagging Strategies
ááááá
áºáá¯á ááá¯ážááŸááºážáá«áááºá git tag. áá»áœááºá¯ááºááá¯á·ááœáẠá¡ááŸááºá¡áá¬ážááŒá¯áá¬ážááá·áº áá¯á¶áá
áºáá¯áá«ááá·áº ááŸááºáá¯á¶áááºáá
áºáá¯ááŸááááºá 1.0
. Kubernetes ááœáẠá€áá¯á¶ááᯠá¡ááºáá¯ááºáá¯ááºáá¬ážááá·áº á¡ááá·áºááŸáá·áº áá¯ááºáá¯ááºáá±áž ááŸááááºá Git ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááááááºáá»á¬áž ááŒá¯áá¯ááºááŒááŒá®áž áá
áºáá»áááºáá»áááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠtag áá¯ááºááŒáááºá 2.0
. repository á០ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡ááá¯ááºáž áááºážááᯠá
á¯áá±á¬ááºážááŒá®áž tag ááŒáá·áº registry ááœáẠáá¬ážááŸááá«á 2.0
. á¡á²áá«ááᯠá
ááºáá±á«áºáááºááŒá®áž á¡á¬ážáá¯á¶ážá¡áááºááŒá±ááẠáá¯ááºáá¯ááºáá±ážá¡áááá±á«á·á
á€áá»ááºážáááºááŸá¯áááŒá¿áá¬ááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠtag ááá¯ááááá¯á¶ážáááºáᬠá
ááºážáááºááŒá®ážááŸáᬠáá¯ááºáá°ááá¯ááºááŒááºážááŒá
áºáááºá á¡áááºááŒá±á¬ááºá·? ááááŠážá
áœá¬á áááºážááẠááá¯ážááá¯ážááŸááºážááŸááºáž áá¯áá¹ááááááºáá«- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á· áá
ááºážáááºááá±ážáá±á¬ áá±á¬á·ááºáá²áá¬ážááŸááºážááᯠáá¯ááºáá±ážáá±ááẠ(á
á
áºáá±ážáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠtag áá
áºáá¯ááá·áºáá¬ážááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº á¡ááŒá¬ážáááºážááŒáá·áº ááá¯ááºááá¯ááºáá«)á áá¯áááá¡áá»ááºááŸá¬á á€áááºážááŒá±á¬ááºážááẠGitflow ááŸáá·áºáááá¬ááááŒá
áºáá«á
áá¯ááá option ááᯠ- git commit + tag. áá¬á
áá¬á¡ááá¯ááºážá¡áááºááœáẠtag áá
áºáá¯ááŸááááºá 1.0
; áááºážá¡ááœáẠregistry ááœáẠ- áá¯ááºáá¯ááºááŸá¯ááœáẠááŒáá·áºáá»ááºáá¬ážáá±á¬ áá¯á¶áá
áºáá¯á ááá¯á·á¡ááŒááºá Kubernetes á¡á
á¯á¡áá±ážááœáẠá¡ááŒáá¯ááŒáá·áºááŸá¯ááŒááºážááŸáá·áº á¡ááá·áºáááºááŸááºááŒááºážáá¯á¶á
á¶áá»á¬áž áá«ááŸááááºá áááºáááºá áá»áœááºá¯ááºááá¯á·ááẠGitflow ááᯠááá¯ááºáá¬áááº- ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœáẠá¡ááááá¬áááœá² (develop
) áá»áœááºá¯ááºááá¯á·ááẠá¡ááºá¹áá«áááºá¡áá
áºáá»á¬ážááᯠááŒá¯áá¯ááºááŒá®áž identifier ááŸáá·áº áááááááºááŒá¯áá«áááºá #c1
. áá»áœááºá¯ááºááá¯á· áááºážááᯠá
á¯áá±á¬ááºážááŒá®áž á€áááºááŸááºá
áá
áºááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáá¯á¶áááºááŒááºážááœáẠáá¯ááºáá±ááŒááºáž (#c1
) áá°áá®áá±á¬ identifier ááŒáá·áº á¡á
ááºážááŒáá·áºááŸá¯ááẠáá¯ááºáá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáááááááºáá»á¬ážááŸáá·áº á¡áá°áá°áááºááŒá
áºáááºá #c2
О #c3
.
áá¯á¶áá±á¬ááºáá±á¬á¡ááºá¹áá«áááºáá»á¬ážááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááááŸááá¬áá±á¬á¡áá«á áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááŒáááºá
ááŒá¯áá¬áááºá Git ááœáẠáá¬áááœá²áá
áºáá¯áááºáá®ážáá«á release_1.1
(á¡ááŒá±áá¶áá±á«áºááŸá¬ #c3
á០develop
) áá®áá¯ááºááœáŸááºááŸá¯ááᯠá
á¯áá±á¬ááºážááá¯á· áááá¯á¡ááºáá°ážááá¯áá±á¬á·... áááºážááᯠááááºá¡ááá·áºááœáẠááŒá¯áá¯ááºáá²á·áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠáá¬ááºááŒá±á¬ááºážááá¯á· ááá¯ážááŸááºážá
áœá¬ ááŒáá·áºáá»ááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠbug áá»á¬ážááá¯ááŒááºáááºá #c4
á¡áá¬ážáá° áá¬ááºáá¯á¶ááá¯á· ááœáŸáá·áºáááºáá«á áá
áºáá»áááºáááºážááŸá¬ááẠááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááᯠáá±á¬ááºááœááºáá»ááºááŸááá«áááºá develop
á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áá«á¡á¬ážáá»á±á¬áºá
áœá¬ áá°áá±á¬ááºáá¬áá«áááºá release_1.1
. áá
áºáá»áááºáá»áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á· áá»á±áááºááŸá
áºáááºáá±á¬ áááááŒá¯áá»ááºááᯠá
á¯á
ááºážááŒá®áž áá¬ááºáá¯á¶ááá¯á· á¡ááºáá¯ááºáá¯ááºááááºá#c25
).
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠááœááºááŒá±á¬ááºáá±ážáá¬áááœá² (ááŸá±á·ááá¯á· á¡ááŒááº) ááŸáá·áº áá±á«ááºážá
ááºážááá¯ááºáá«áááºárelease_1.1
) ááá¬ááŒá®ážá áá»áœááºá¯ááºááá¯á·ááẠဠcommit ááœáẠáá¬ážááŸááºážá¡áá
áºááŒáá·áº tag áá
áºáá¯áááºáá¬ážááẠ(1.1
) áá«áá±ááá·áº áá®áá¯á¶ááᯠregistry ááŸá¬ á
á¯áá±á¬ááºážáá¬ážááŒá®ážááŒá
áºááá¯á· á¡á²áá«ááᯠáááºáá
á¯áá±á¬ááºážááá¯á·á¡ááœááºá ááŸáááŒá®ážáá¬ážáá¯á¶áá²ááᯠáá¯ááááááºáá
áºáᯠáááºááá·áºááá¯ááºáá¯á¶áá«áá² (á¡áá¯áá±á¬á· registry áá²ááŸá¬ tags ááœá±ááŸááá±áá«ááŒá®á #c25
О 1.1
) á¡á²áá®áá±á¬ááºááŸá¬áá±á¬á· áá»áœááºáá±á¬áºááá¯á·á á¡á²áá«ááᯠáá¯ááºáá¯ááºááá¯á·á¡ááœáẠááŒáá·áºáááºá
áá¯á¶áá
áºáá¯á¶áááºážááá¯áᬠáá¬ááºááœáŸááºážááá¯á· á¡ááºáá¯ááºáá¯ááºáááŒááºážááŸá¬ á¡á¬ážáááºážáá»ááºáá
áºáᯠááŸááá«áááºá#c25
) ááŸáá·áº áá¯ááºáá¯ááºááŸá¯ááœáẠááœá²ááŒá¬ážááẠ(1.1
) ááá¯á·áá±á¬áº "áá¯ááºááá¯ááºážááá¯ááºáá¬" ááẠááŸááºáá¯á¶áááºááŒááºážá០áá°áá®áá±á¬áá¯á¶ááŒá
áºááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áááá«áááºá
á
á
áºááŸááºáá±á¬á¡á¬ážáááºážáá»ááºááŸá¬ áá±á«ááºážá
ááºážááŒááºážá¡ááœáẠá¡áá±á¬ááºá¡áá¶á·áááŸááá±á¬ááŒá±á¬áá·áº áá»ááºááŒááºá
áœá¬ ááŸá±á·ááá¯á·áá¯ááºáá±á¬ááºááááºááŒá
áºáá«áááºá
ááŸáá·áºááœááºáá áºáᯠáááºáá¯ááºááá¯ááºáá«áááº... ááá¯ážááŸááºážáá±á¬ 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á
... ááŒá®ážáá»áŸááºááá¯áá²á·ááá¯á·áá±á¬ááá¯ááºá០checksum (SHA256 áá áºáááº) ááá¯áá°áá«á áá® áááºááŸáẠDocker áá¯á¶á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáááºááŸááºáá±ážááá·áº á¡áá¬á¡á¬ážáá¯á¶ážá
áá¯á¶ááŒááºážááᯠááŒááºááœá¬ážááŒáá·áºáá¡á±á¬áẠáááááŒá¯ááá·áºá¡á
á¬áž ááá¯áá²á·ááá¯á·áá±á¬ áááºááŸááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá, i.e. áááºááŸááºáá»á¬ážááŒáá·áº áá¯á¶áá»á¬ážááᯠtag áá¯ááºáá«á
á¥ááá¬á¡á¬ážááŒáá·áºá áá¯ááºáá±ááŸá¯á០áá»áœááºážáá»ááºááŸá¯á¡áá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáá±á«ááºážá
ááºážááẠááá¯á¡ááºáá±á¬á¡áá«ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŸááºáááẠáá±á«ááºážá
ááºážááŸá¯áá
áºáá¯ááᯠáá¯ááºáá±á¬ááºááá¯ááºáááº- áááºážááœáẠááœá²ááŒá¬ážáá±á¬ ááœá²ááŒá¬ážáááºááŸááºááŸá¯ ááŸááá±á¬áºáááºáž áá°áá®áá±á¬ áááºááŸááºááŸááá«áááºá áá°áá®áá±á¬ identifier ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá¯á¶ááᯠáá¯ááºáá¯ááºáááºá¡ááœáẠááŒáá·áºáá»á®áá«áááºá
á¡á¬ážáááºážáá»ááºááŸá¬ áá¯ááºáá¯ááºááŸá¯ááá¯á· ááœááºážááá¯á·áá²á·ááá·áº áááááááºá¡áá»áá¯ážá¡á á¬ážááᯠááá¯áá¯á¶ážááŒááºááẠáááŒá áºááá¯ááºáá±á¬á·áá² - checksums ááẠáŠážáááºáá»ááºáá áºáá¯áááºážááœááºáᬠá¡áá¯ááºáá¯ááºáá«áááºá á€ááŒá¿áá¬ááᯠáááºáá¬áá±áá¬ááŒáá·áº áááºáá±á¬ááºážá¡ááœáŸá¬áá áºáá¯ááŒáá·áº ááŒá±ááŸááºážááẠ- áá«áááºážááᯠáá±á¬ááºááŸááŒá±á¬ááŒáááºá
werf ááœáẠáááºáá¯ááºááŒááºážá
werf ááœááºáá»áœááºá¯ááºááá¯á·ááá¯áááœá¬ážáá²á·ááŒá®ážá ááºáá áºáá¯áááºážááœááºááááºážáááºážááŒááºážáááŸááá±á¬ cache ááŒáá·áºááŒáá·áºáá±áááºáá±á¬ááºáááºááŒááºáááºáá±áááº... ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠDocker áá¯á¶áá»á¬ážááᯠá¡áá»áá¯ážá¡á á¬ážááŸá áºáá»áá¯ážááŒáá·áºáááºáá±á¬ááºáá±áááºá á áẠО áá¯á¶ááááº.
werf Git repository ááẠbuild á ááá°áá®áá±á¬ á¡ááá·áºáá»á¬ážááᯠáá±á¬áºááŒáá±á¬ build-specific ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááááºážáááºážááẠ(ááááºáááºáá®, install, ááááºáááºáá®, áááºáá±á¬ááºáááº) áááá¡ááá·áºá checksum á¡ááŒá ẠáááºááŸááºáá¬ážáá±á¬ áááºááŸááºááŒáá·áº áááá¡ááá·áº áá¯ááºáá¯á¶ááᯠá á¯áá±á¬ááºážáá«áááºá ááá¯á·áá±á¬áẠá ááºááŒáá·áºáá¯á¶á¡áá áºá¡ááœáẠáááºážá checksum ááᯠáá»áœááºá¯ááºááá¯á· ááœááºáá»ááºáááº... á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááá·áºá¡á¬ážáá¯á¶ážá¡ááœáẠáááºáá«ááá²áá² áá¯ááºáá±á¬ááºáááºá ááááºá¡áá±ááŒáá·áº á ááááºáá¯á¶áá»á¬áž á¡á á¯á¡áá±ážááᯠáááŸááá«áááºá ááá¯á·áá±á¬áẠáááºážááá°áá¡á ááŸáá·áºáááºáááºááá·áº áááºáá¬áá±áá¬áá«áááºááá·áº áá±á¬ááºáá¯á¶ážáá¯á¶ááᯠááŒá¯áá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá€áá¯á¶ááᯠááá°áá®áá±á¬áááºážáááºážáá»á¬ážááŒáá·áº tag (áá±á¬ááºááŸá¡áá±ážá áááºáá±á¬áºááŒáááº)á
áááºážááŒá®ážáá±á¬áẠáá»áŸá±á¬ááºááœáŸá¬áá¯ááºááá¯áᬠááŒá±á¬ááºážáá²áá¬ážááá·áº ááœááºááá·áºá¡áá
áºáá
áºáᯠáá±á«áºáá¬áááºááá¯áá«á
áá¯á·á áá¬ááŒá
áºááá²? áá¯ááºá¡ááŒá±á¬ááºážá¡áá²á¡ááœááºá áá¬áá±ážááŸá¯áá
áºáᯠáááºáá®ážáááºááŒá
áºááŒá®áž á¡ááá·áºáá¯ááºáá¯á¶á¡áá
áºááᯠááŒááºáááºáááºááŒá
áºáááºá áááºážá áááºááŸááºááᯠá
ááááºáá¯á¶áá±á¬ááºážááŸáá·áº áá¬áá±ážááŸá¯á¡áá
áºá checksum á¡ááŒá
ẠáááºááŸááºáááºááŒá
áºáááºá á€áá¯á¶á០áá±á¬ááºáá¯á¶ážáá¯á¶á¡áá
áºááᯠáááºáá®ážáá«áááºá á¡ááŒá¬ážá¡ááá·áºáá»á¬ážááœáẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááŸáá·áºá¡áá° á¡áá¬ážáá°á¡ááŒá¯á¡áá°áá»á¬áž ááŒá
áºáá±á«áºáá¬áááºááŒá
áºáááºá
ááá¯á·ááŒá±á¬áá·áºá á ááºááŒáá·áºáá¯á¶áá»á¬ážááẠááŒáá·áºáá±ááááºážáááºážááá¯ááºááá·áº áááºááŸáºáá áºáá¯ááŒá áºááŒá®áž áááºážááŸáááºáá®ážááŒá®ážáá¬ážáá¯á¶áá»á¬ážááᯠDocker Registry ááá¯á· á¡ááºáá¯ááºáá¯ááºáá¬ážáááºá
ááŸááºáá¯á¶áááºááᯠááá·áºááŸááºážáá±ážáá¯ááºáá«á
áá»ááºááá¯ááºááá·áº tags áá»á¬ážáá±á¬ááºááœáẠááœá²áá±áá±á¬ á¡ááœáŸá¬áá»á¬ážááᯠáá»ááºááŒááºážá¡ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááŒá±á¬áá±ááŒááºážááá¯ááºáá« - áááºážááẠDocker Registry ááá¯ááºááá¯ááºá á á¶áááºááŸááºáá»ááºáá áºáá¯ááŒá áºáááºá Docker tag á¡áá»á¬ážá¡ááŒá¬ážá á¯áá¯á¶áá±áá»áááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·á¡áá»áá¯á·ááᯠáááá¯á¡ááºáá±á¬á·ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áá¬ážáááºáá±á¬áºáááºáž áááºážááá¯á·ááẠáá±áá¬áá°ááẠ(ááŸáá·áº/ááá¯á·ááá¯áẠáá»áœááºá¯ááºááá¯á· áá±ážáá±á¬ááºáááº)á
ááá·áºááŸááºážáá±ážáá»á°áá¬ááœá±á áá¬ááœá±áá²á
- áááºáž áá¬ááŸáá¯ááºááá¯á·áááá°áž áááá·áºááŸááºážáá«ááŸáá·áº. ááá«ááá¶ááœáẠááŒá®ážáá¬ážáá±á¬ á¡ááŸá¯ááºá¡ááœá±ážáá»á¬ážááᯠááŸááºážáá¯ááºáááºááẠá¡ááá¯áá±áá¬á¡ááœáẠá¡áááºážááẠáá±ážáá»á±ááŒááºážááẠá¡ááŸááºááááºááẠááœááºáá°áá«áááºá áá«áá±ááá·áº áá«á á¡ááá¯ááºážá¡áá¬áá áºáá¯á¡áááᬠá¡áá¯ááºáá¯ááºáá«áááºá
- á¡ááŒáá·áºá¡á ááŒááºáááºáááºááŸááºáá«á. áá¯á¶áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá»ááºááŒá®áž CI á áá áºááŸá áááºááŸááá¯á¶áá»á¬ážááá¯áᬠááŒááºáááºáááºáá±á¬ááºáá«á ááŒá¿áá¬áá áºáᯠááŒá áºáá¬ááá¯ááºáááºá ááœááºááááºáá¬ááᯠáá¯ááºáá¯ááºááŸá¯ááœáẠááŒááºáááºá áááºáá«áá áááºáá°á·ááá¯áá»áŸ áá ááºážáááºááá±ážáá±á¬ áá¯á¶á¡áá áºáá áºáá¯ááᯠáááºáá«áááºá áááºážááẠáááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ á¡áá°á¡áááᯠáááºáá áºáááºá
- á áááºážááŒá¬. ááŸááºáá¯á¶áááºáá áºáá¯ááẠááŒáá·áºáá»áŸá¶áá¬ááẠ- áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶áá»á¬ážááᯠá¡ááŒá¬ážááá¯á· á¡ááºáá¯ááºáá¯ááºáá«áááºá ááááºáááºážáááºážááœááºáá²á·ááá¯á· áá°áá®áá±á¬ááŒá¿áá¬- ááŒáá·áºáá»áŸá¶áá±ááá·áº registry ááᯠáááºááá·áºá¡áá»ááºááœáẠáááºááŸááºážáááºážááá¯ááºáááºáááºážá
- á¡áá»áááºá¡á¬ážááŒáá·áº. 1 ááááºááŒá®ážáá±á¬ áá¯á¶á¡á¬ážáá¯á¶ážááᯠáá»ááºááá¬ážá áá«áá±ááá·áº áá áºááá±á¬áẠááœááºážáá¶ááœááºážáá¶áá¬ážáá²á· áááºáá±á¬ááºááŸá¯áá áºáá¯áá±á¬á· ááŸáááŸá¬ áá±áá»á¬áá«áááº...
- áááºááŒáá·áº áá»ááºááá¯á·áááŒá®áá¬ážááá¯áá¬ááᯠáá¯á¶ážááŒááºáá«á
á¡ááŸááºáááẠá¡áá»á¯á¶ážáááºáá±á¬ ááœá±ážáá»ááºá áᬠááŸá áºáá¯ááŸááááº- áááá·áºááŸááºážáá« ááá¯á·ááá¯áẠá áááºážááŒá¬áá±á¬áẠ+ áááºááŒáá·áº áá±á«ááºážá ááºáá«á áá±á¬ááºáá¯á¶ážá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«á¡ááŒá±á¬ááºážáá»á¬ážááᯠááŒá±á¬áá±áááº- registry ááᯠááŸááºážááẠá¡áá»áááºáááºááŒá®áᯠáá¬ážáááºáá±á¬á¡áá«á áááºááẠá¡áá áºáá áºáá¯áááºáá®ážááŒá®áž á¥ááá¬á¡á¬ážááŒáá·áº áá áºááá¬áá¬áá¡ááœááºáž áááºážááœáẠáá¯á¶á¡áá áºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá·áºáá«á áá áºáá¡ááŒá¬ááœááºá Kubernetes ááŸá áááºááá·áº pods áá»á¬ážááẠááŸááºáá¯á¶áááºááŒááºážá¡áá±á¬ááºážááᯠáááºáááºá¡áá¯á¶ážááŒá¯áá±áá±ážáááºááᯠááŒáá·áºááŸá¯ááŒá®áž áááºážááá¯á·ááá¯áááºáž ááŸááºáá¯á¶áááºá¡áá áºááá¯á· ááœáŸá²ááŒá±á¬ááºážáá«á
áá«ááá¯á·áá¬ááœá±áá±á¬ááºáá¬áá¬áá²á werf? áá»áœááºá¯ááºááá¯á·á á¯áá±á¬ááºážáááº-
- Git head - áá¯á¶áá»á¬ážááœáẠGit ááœááºáááºáá¬ážáá±á¬á¡áá¬á¡á¬ážáá¯á¶ážááá¯ááá¯á¡ááºáááºáá¯áá°ááá«á tags á¡á¬ážáá¯á¶ážá á¡ááá¯ááºážá¡áááºáá»á¬ážá¡á¬ážáá¯á¶áž (ááá¯á·ááŒá±á¬áá·áºáááºážááᯠGit ááá¯ááºááá¯ááºáá»ááºáááºááá¯á¡ááºáááº)
- áááºááŸá Kubernetes ááá¯á· á á¯ááºáá¯ááºáá±ááá·áº pods á¡á¬ážáá¯á¶ážááá¯á
- ReplicaSets á¡áá±á¬ááºážáá»á¬áž (áááŒá¬áá±ážáá®á ááœááºááŸááá²á·áá±á¬) ááŸáá·áº Helm áá¯ááºáá±ááŸá¯áá»á¬ážááᯠá áááºááºáááºááŒá®áž ááá¯áá±áá¬ááœáẠáá±á¬ááºáá¯á¶ážáá¯á¶áá»á¬ážááᯠááœá±ážáá»ááºáááºáááºáž á á®á ááºáá¬ážáá«áááºá
... ááŒá®ážáá»áŸáẠá€á¡á á¯á០á¡ááŒá°áá±á¬ááºá á¬áááºážáá áºáᯠááŒá¯áá¯ááºáá« - áá»áœááºá¯ááºááá¯á· áá»ááºáááºááá¯ááºáá±á¬ áá¯á¶áá»á¬ážá á¬áááºážá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºážáá¯ááºááŒá®ážáá±á¬áẠááááá²á·áá¬ááºáá¯á¶áá¯ááºáá¯á¶áá»á¬ážááᯠááœá±á·ááŸáááŒá®áž áááºážááá¯á·ááá¯áááºáž áá»ááºáá áºáá«áááºá
á ááºáá±á«áºáá»áá¬ážáá«á
áá¯á¶ááŒááºá áááºáá»ááá±á¬ááŒá±ááŒá¬áá»ááº
ááŒáá·áºáá»ááºááŒááºážááœáẠáá»áœááºá¯ááºá¡á¬áá¯á¶á áá¯ááºááá¯áá±á¬ áááá¡áá»ááºááŸá¬ ááœááºážáá¶áá¬ážáá±á¬ áááºážááŒá áºááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠááŒá±ááŒá¬ááŒááºážááŒá áºááŒá®ážá ááœáŸáá·áºáááºááŒááºážááŒá áºáá«áááºá Kubernetes á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá±á¬áºááŒááá·áº áá°áááºáž YAML á á¬ááœááºá á¬áááºážááẠá¡á á¯á¡áá±ážááœáẠá¡ááŸááºáááẠáá¯ááºáá±á¬ááºáá±ááá·áº ááááºááŸáá·áº á¡ááŒá²áááºáž ááœá¬ááŒá¬ážáá«áááºá Kubernetes ááẠconfiguration ááœááºááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áº-
- ááœá²ááŒá¬ážáááºááŸááºááŸá¯áá»á¬ážá
- áááºáá±á¬ááºááŸá¯ááááºážá¡áá»ááºá¡áááº;
- áá¯á¶áá±áááºááá¯ážáá»á¬ážá áœá¬á
- áááºááŸáá¡ááŒá±á¡áá±ááŸáá·áºá¡ááá¯ááºážá
- áááºááœáá·áº webhook á áá áºá áááºáá áºááá¯ááºážá¡ááŒá ẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá
- á¡áá»áá¯ážáá»áá¯ážáá±á¬ controllers (ááŸáá·áºá¡áá»áááºááá¬ážááœá²) áá¡áá¯ááºáááááºá
ááá¯á·ááŒá±á¬áá·áºá á¡áááºážá¡ááŒá áºááœá²á·á ááºážáá¯á¶á¡áá áºáá áºáá¯áá±á«áºáá¬áá±á¬á¡áá« (á¡áá áº) áá»áœááºá¯ááºááá¯á·ááẠáááºážááŸáá·áºá¡áá° áááºááŸáá "ááá¯ááºááá¯ááº" ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠáá°á áá±ážáá»áá¯á¶áá»áŸáá (á¡áááºááŸááºáá±á¬) áá®ááá¯áá¯ááºááá¯á· ááŸáá¯ááºážááá«áááá·áºáááºá á¡áá Ạáá±á¬ááºáá¯á¶ážá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á ᶠ(áá±á¬ááºáá¯á¶ážáá¯á¶ážáá¬ážáááºá) á¡áá±á«áºááᯠáá°ážáá±ážáá«á á¡áááºááŸááºáá±á¬ patch ááá¯áááºáá¶áááŸááá²á·áááºá
á€áá»ááºážáááºáááºážáá¯áá±á«áºáááºá 2-áááºážáá±á«ááºážá ááºáž. á¥ááá¬á¡á¬ážááŒáá·áº Helm ááœááºá¡áá¯á¶ážááŒá¯áááºá
áááºážááŸááááºá 3-áááºážáá±á«ááºážá ááºážá ááœá²ááŒá¬ážáá±á¬á¡áá¬á
- ááŸáá¯ááºážááŸáẠáá±á¬ááºáá¯á¶ážáá¯á¶ážáá¬ážáááºá О á¡áá áºáá»ááºáá áºáá²á·áá¬ááᯠááŒáá·áºáá«á
- ááŸáá¯ááºážááŸáẠá¡áá ẠО á¡áááºááŸááºáá±á¬áááºááá·áºáá¬ážááẠááá¯á·ááá¯áẠááŒá±á¬ááºážáá²áá¬ážáááºááᯠáá»áœááºá¯ááºááá¯á·ááŒáá·áºááŸá¯áá«á
- summed patch ááᯠá¡áá¯á¶ážááŒá¯áááºá á¡áááºááŸááºáá±á¬.
Helm ááŒáá·áº á¡ááá®áá±ážááŸááºážáá±á«ááºáž 1000+ ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠ2-way áá±á«ááºážá ááºážááŒááºážááŒáá·áº á¡ááŸááºáááẠá¡áááºááŸááºáá±áá«áááºá ááá¯á·áá±á¬áºá áááºážááœáẠHelm áá¯á¶ááŸááºá¡áá¯ááºáá¯ááºááẠáá°áá®áá±ážááá·áº áá»áœááºá¯ááºááá¯á·á áá¬áá±ážááŸá¯áá»á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááŒá±ááŸááºážáá²á·ááá·áº ááŒá¿áá¬áá»á¬ážá áœá¬ááŸááááºá
áá¯ááºááœáŸáá·áºááŸá¯á¡ááŒá±á¡áá±á¡ááŸááº
áá»áœááºá¯ááºááá¯á·á CI á
áá
áºááẠáá¬ááá·áºááŒá
áºáááºá¡áá±á«áº á¡ááŒá±áá¶á Kubernetes á¡ááœáẠááœá²á·á
ááºážááŸá¯á¡áá
áºááᯠáá¯ááºáá±ážááŒá®ážáá±á¬ááºá áááºážááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠáá¯ááºááœáŸáá·áºááẠ(áá»áŸá±á¬ááºáá¬áž) to a cluster - Helm ááá¯á¡áá¯á¶ážááŒá¯ááŒááºáž ááá¯á·ááá¯áẠkubectl apply
. ááá¯á·áá±á¬ááºááœáẠáá±á¬áºááŒáá¬ážááŒá®ážááŒá
áºáá±á¬ N-way áá±á«ááºážá
ááºážááŸá¯ááẠKubernetes API ááẠCI á
áá
áºááŸáá·áº áááºážááᯠá¡áá¯á¶ážááŒá¯áá°á¡á¬áž á¡áááºááŒá¯áá»ááºááŒáá·áº áá¯á¶á·ááŒááºáááºá
ááá¯á·áá±á¬áºá ááŒá®ážáá¬ážáá±á¬ááŒá¿áá¬áá
áºáá¯ááŸááááºá á¡á±á¬ááºááŒááºáá±á¬ á¡ááá®áá±ážááŸááºážááẠá¡á±á¬ááºááŒááºá
áœá¬ ááŒáá·áºáá»áááŒááºážááᯠáááá¯ááá¯áá«á. á¡áááºá Kubernetes ááẠáááºááá·áºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážáá»ááááºááᯠáá¬ážáááºááŒá®áž áááºážááᯠá¡áá¯á¶ážáá»áá«á ááááºááẠáááºááá¯á·ááŒá
áºáááºááᯠáá»áœááºá¯ááºááá¯á· áááááá¯ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá ááŸá±á·áááºážááœáẠáá±á«á·ááºáá»á¬ážááᯠá¡ááºááááºáá¯ááºááŒááºážááŸáá·áº ááŒááºáááºá
áááºááŒááºážááá¯á·ááẠá¡á±á¬ááºááŒááºááá¯ááºáá±á¬áºáááºáž áá±á¬ááºáá¶ááœáẠááá¯ááºáá²á áááºáááºáá±ááá·áº á¡ááá®áá±ážááŸááºážáá¯á¶áá»á¬ážá áá¬ážááŸááºážá¡áá»áá¯ážáá»áá¯ážááᯠáá»áœááºá¯ááºááá¯á· áááŸááá«áááºá
á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºáááºá
áœá¬áá¯ááºáá±á¬ááºáááºá á€á¡á
á®á¡á
á¥áºááẠKubernetes API á០á¡ááŒá±á¡áá±á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºáá¶áááŸáááŒá®áž á¡áá¬áá»á¬ážá áááá·áºá¡ááŒá±á¡áá±ááŸááºááᯠáááºáá¶ááœá²ááŒááºážá
áááºááŒá¬áááºá¡ááœáẠááá¯á·ááœáŸááºááá·áº á¡áá°ážááŒá±áá¬áá¶ááá·áºááºáá
áºáᯠááá¯á¡ááºáá«áááºá Go ááœáẠOpen Source á
á¬ááŒáá·áºááá¯ááºáá
áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áááºáá®ážáá²á·áááº-
werf á¡ááá·áºááŸá á€ááŒá±áá¬áá¶áááááá¬á á¡ááŒá¯á¡áá°ááᯠDeployments ááá¯á·ááá¯áẠStatefulSets ááœáẠááá·áºáá¬ážááá·áº ááŸááºá
á¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á
á®á
ááºáááºááŸááºáá¬ážáááºá á¡ááá ááŸááºáá»ááº- fail-mode
- á¡á±á¬ááºáá« á¡áááá¹áá«ááºáá»á¬ážááᯠáá¬ážáááºáááºá
-
IgnoreAndContinueDeployProcess
â áá»áœááºá¯ááºááá¯á·ááẠá€á¡á áááºá¡ááá¯ááºážááᯠáá¯ááºáá áºááŒááºážá ááŒá¿áá¬áá»á¬ážááᯠáá»á áºáá»á°ááŸá¯ááŒá®áž ááŒáá·áºáá»ááºááŸá¯ááᯠáááºáááºáá¯ááºáá±á¬ááºáá«áááºá -
FailWholeDeployProcessImmediately
- á€á¡á áááºá¡ááá¯ááºážááŸá á¡ááŸá¬ážáá áºáá¯ááẠááŒáá·áºáá»ááºááŒááºážáá¯ááºáááºážá ááºááᯠáááºááá·áºá á±áááºá -
HopeUntilEndOfDeployProcess
â ááŒáá·áºáá»ááºááŸá¯á¡ááŒá®ážááœáẠá€á¡á áááºá¡ááá¯ááºážááẠá¡áá¯ááºáá¯ááºááá¯ááºáááºáᯠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá á€á¡áááºážá¡ááŒá
áºáá»á¬ážááŸáá·áº ááŸááºáá»ááºáááºááá¯ážáá»á¬ážááᯠáá±á«ááºážá
ááºáá¬ážáááºá fail-mode
:
áá»áœááºá¯ááºááá¯á· ááááá¯á¶ážá¡ááŒááẠááŒáá·áºáá»ááºáá±á¬á¡áá«á áá±áá¬áá±á·á
Ạ(MongoDB) ááẠá¡áááºááá·áºáááŒá
áºáá±ážáá« - ááŒáá·áºáá»ááºááŸá¯áá»á¬áž áá»ááºááœááºááœá¬ážáá«áááºá ááá¯á·áá±á¬áº áááºážá
áááºáááºá¡ááá¯ááºá¡ááá·áºááᯠáááºá
á±á¬áá·áºááá¯ááºážááá¯ááºááŒá®áž áááºááŒáá·áºáá»áá¬ážááŸá¯ááᯠáááºáááºáá¯ááºáá±á¬ááºáááºááŒá
áºáááºá
werf ááœáẠkubedog á¡ááœáẠáá±á¬ááºááẠááŸááºá ᯠááŸá áºáᯠááŸááá«áááº-
-
failures-allowed-per-replica
- áá¯á¶á á¶áá°áá áºáá¯á á®á¡ááœáẠááœáá·áºááŒá¯áá¬ážáá±á¬ ááŒáœá±áá»á¡áá±á¡ááœááºá -
show-logs-until
â ááŸááá·áºáá¬ážáá±á¬ pods áá»á¬ážá¡á¬ážáá¯á¶ážá០werf (stdout) ááŸááºáááºážáá»á¬ážááŒáááá·áºá¡ááá¯ááºá¡ááá·áºááᯠááááºážááŸááá«á áá¯á¶áá±áá¬ážPodIsReady
(áá¬ááºá¡ááœá¬ážá¡áá¬á áááºááá·áºá¡áá»áááºááœáẠáá»áœááºá¯ááºááá¯á·áááá¯áá¬ážááá·áºá á¬áá»á¬ážááᯠáá»á áºáá»á°ááŸá¯áááº)á ááá¯á·áá±á¬áº áááºááá¯ážáá»á¬ážáááºáááºáž á¡áá»á¯á¶ážáááºáááº-ControllerIsReady
ОEndOfDeploy
.
ááŒáá·áºáá»ááºááŸá¯ááá± áá±á¬ááºááẠáá¬ááá¯áá»ááºáá±ážáá²á
áá±á¬áºááŒááŒá®ážáá¬áž á¡áá»ááºááŸá áºáá»ááºá¡ááŒááºá
- ááŒáẠáá áºáá¯á¶ážáá»á¬áž - ááá¯á¡ááºáá±á¬áá°áá»á¬ážááá¯áᬠáááºááá¯ááºáá¯ááºáá«á
- áá áºáá¯áẠááá¯ážáááºááŒááºážá¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº á¡áá¯ááºááẠáááá áºá¡áá±á¬áºááŒá¬ "ááááºááááºá áœá¬" áá»áááºáá¬ážáááºááá¯áá«á ááá¯áá±áá¬ááœáẠááŒá áºáá»ááºáá±áááºáá»á¬ážááᯠáá¬ážáááºááẠá¡áá±ážááŒá®ážáá«áááºá
- ОЌеÑÑ á¡ááá¯á¡áá»á±á¬ááºááŒááºááŸáá·áºááŒááºážá áá áºáá¯áᯠááŸá¬ážááœááºážááœá¬ážáá«á (ááá¯á·ááŒá±á¬áá·áº ááŒáá·áºáá»ááºááŸá¯á á¡ááŒá±á¡áá±ááŸááºááᯠááááẠá¡áá±ážááŒá®ážáááº)á ááœáŸááºáááºááŸá¯ááẠá¡áá¯ááŒá°áá¯á¶ážááŒá áºááááº- á¡áá¯á¶ážá¡ááááœá¬ážáááºááŒá áºá á±á á¡á¬ážáá¯á¶ážááẠáááºážá ááááºá¡ááŒá±á¡áá±ááá¯á· ááŒááºááœá¬ážáááºááŒá áºáááºá
ááááºáá»á¬ážááá¯
áá¯áá¹ááá®áá
áºáá¯á¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·á¡ááœááºá áá±ážááá¯á·ááŒááºážáááá°áá®áá±á¬á¡ááá·áºáá»á¬ážááœáẠáá±á¬áºááŒáá¬ážáá±á¬ ááœá²ááŒá¬ážáá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠ(áááºáá±á¬ááºááŒááºážá áá¯ááºáá±ááŒááºážá á¡áá¯á¶ážáá»ááŒááºáž)á CI á
áá
áºááŸáá·áº á¡áá¯á¶ážáááºááŸá¯ááẠáá¯á¶áá±á¬ááºáá«áááºá
áááá¯á¶ážáá»á¯ááºáá¬á
werf áá¡áá°á¡áá®ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠDevOps á¡ááºáá»ááºáá®áá¬áá»á¬ážá¡ááœáẠááŒá¿áá¬á¡áá»á¬ážá¡ááŒá¬ážááᯠááŒá±ááŸááºážáá¬ááœáẠáá±á¬ááºážááœááºáá±á¬ááá¯ážáááºááŸá¯ááᯠáááŸáááŒá®áž áá»ááºááŒáá·áºáá±á¬á¡ááá¯ááºážá¡ááá¯ááºážá¡áá±ááŒáá·áº á¡áááºážáá¯á¶áž á€á¡áá¯á¶ážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠááŒáá¯ážá
á¬ážáá²á·áá«á áááºážááŒá±á¬ááºáááá«áááºá á¡áá°ááᜠááááºáá±á¬ááºážáá
áºáá¯áááŸáááẠááá¯ááá¯ááœááºáá°áááºááŒá
áºáááºá
áá®áá®ááá¯áá»á¬ážááŸáá·áº áááá¯ááºáá»á¬áž
áá»á±á¬áºááŒá±ááœá²á០áá®áá®ááᯠ(~47 áááá áº)
á¡á á®áááºáá¶á á¬áááºááŒáá»ááº-
PS
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááŸá Kubernetes á¡ááŒá±á¬ááºáž á¡ááŒá¬ážá¡á á®áááºáá¶á á¬áá»á¬áž-
- «
Kubernetes ááŸá á¡á±á¬áºááá¯á áá±ážáá»á²á·ááŒááºážááŸáá·áº á¡áááºážá¡ááŒá áºá á®áá¶ááá·áºááœá²ááŸá¯ » (Dmitry Stolyarov; á§ááŒá®á 27 áááºá 2019 âStrikeâ ááœááº); - «
Kubernetes ááᯠááá¯ážáá»á²á·ááŒááºážááŸáá·áº ááŒáá·áºá áœááºááŒááºážá » (Andrey Polovov; á§ááŒá® 8á 2019 ááœáẠSaint HighLoad++); - «
áá±áá¬áá±á·á áºáá»á¬ážááŸáá·áº Kubernetes » (Dmitry Stolyarov; ááá¯áááºáᬠ8á 2018 ááœáẠHighLoad++); - «
á á±á¬áá·áºááŒáá·áºááŒááºážááŸáá·áº Kubernetes » (Dmitry Stolyarov; áá±á 28 áááºá 2018 ááœáẠRootConf); - «
Kubernetes ááŸáá·áº GitLab ááŒáá·áº á¡áá±á¬ááºážáá¯á¶áž á¡áá±á·á¡áá»áá·áºáá»á¬áž CI/CD » (Dmitry Stolyarov; ááá¯áááºáᬠ7á 2017 ááœáẠHighLoad++); - «
ááá±á¬áá»ááºáááºáá»á¬ážááœáẠKubernetes ááŸáá·áº áá»áœááºá¯ááºááá¯á·áá¡ááœá±á·á¡ááŒá¯á¶ » (Dmitry Stolyarov; ááœááºá 6á 2017 ááœáẠRootConf).
source: www.habr.com