ááá±á·áá»áœááºá¯ááºááá¯á·ááẠGitOps áá¡ááŒá±áá¶áá»á¬ážááŸáá·áºáá±á¬áºáááºáá»á¬ážá¡ááŒá±á¬ááºážááŸáá·áºá€áá±á¬áºáááºáá»á¬ážááᯠOpenShift ááááºáá±á¬ááºážáá±á«áºááœááºáááºáá²á·ááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºááŒáááºááá¯ááŒá±á¬áá«áááºá á€á¡ááŒá±á¬ááºážá¡áá¬á¡ááœáẠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯áááºážááœáŸááºáá
áºáᯠáááá¯ááºáá«áááºá
á¡ááá¯áá»á¯ááºá¡á¬ážááŒáá·áºá GitOps ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº á¡ááá®áá±ážááŸááºážááœá²á·á
ááºážáá¯á¶áá»á¬ážááᯠá
á®áá¶ááá·áºááœá²ááẠGit ááœá²áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠá¡áá±á·á¡áá»áá·áºá¡á
á¯áá
áºáá¯ááŒá
áºáááºá GitOps ááŸá Git ááá¯ááŸá±á¬ááºááŸá¯á¡á¬áž á
áá
áºáá¡ááŒá±á¡áá±ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºá¡áááºážá¡ááŒá
áºáá
áºáá¯áááºážá¡ááŒá
Ạááá±á¬áá¬ážáᬠá€á¡ááŒá±á¡áá±ááá¯á· áááºááá·áºááŒá±á¬ááºážáá²ááŸá¯áááᯠá¡ááŒáá·áºá¡áááŒá±áá¬áá¶ááá¯ááºááŒá®áž á
á
áºáá±ážááá¯ááºáááºá
GitOps ááœááºááŒá±á¬ááºážáá²ááŸá¯ááŒá±áá¬áá¶ááŒááºážá
áááºáá°ážáááºá¡áá
áºá¡áááºážááá¯ááºáá«; á€áá»ááºážáááºááŸá¯ááᯠapplication source code ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá«áá
áºááá¹áá¬áá¯á¶ážáá®ážáá«ážááŒá¬ááŸááºá
áœá¬á¡áá¯á¶ážááŒá¯áá²á·áááºá GitOps ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŸáá·áº á¡ááá®áá±ážááŸááºážááœá²á·á
ááºážáá¯á¶á
á®áá¶ááá·áºááœá²ááŸá¯ááœáẠá¡áá¬ážáá°á¡ááºá¹áá«áááºáá»á¬áž (ááŒááºáááºáá¯á¶ážáááºááŒááºážá ááœá²áá¯ááºááŒááºážá áááºáá»á¬ážá
áááºááŒáá·áº) ááᯠááá¯ážááŸááºážá
áœá¬áá¯ááºáá±á¬ááºááŒá®áž á¡áááºážá¡ááŒá
áºáá¯ááºá
á®áá¶ááá·áºááœá²ááŸá¯ááœááºáá²á·ááá¯á· á¡áá¬ážáá°á¡áá»áá¯ážáá»á±ážáá°ážáá»á¬ážááᯠáá±ážáá±á¬ááºáá«áááºá
GitOps á¡ááœáẠááá¬áááºááá¯ááºáᬠá¡áááá¹áá«ááºááœáá·áºááá¯áá»áẠááá¯á·ááá¯áẠá¡áááºááŒá¯áá¬ážáá±á¬ á ááºážáá»ááºážáá»á¬áž ááá«ááŸááá«á á€á¡áá±á·á¡áá»áá·áºááᯠáááºáá±á¬ááºáá¬ážááá·áº á¡ááŒá±áá¶áá°á¡á á¯áá áºáá¯áᬠááŒá áºáá«áááºá
- á áá áºá ááŒá±ááŒá¬áá±á¬áºááŒáá»ááºá¡á¬áž Git repository (configsá monitoring á áááºááŒáá·áº) ááœáẠááááºážáááºážáá¬ážáááºá
- ááŒááºááẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºáááºá
- Git ááœááºážá¡á¬ážáá±ážáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááŸá±á¬ááºááŸá¯á¡ááœááºážááŸá áá±áá¬áá»á¬ážááŸáá·áº áááºáááºáá±áá±á¬ á áá áºáá»á¬ážá á¡ááŒá±á¡áá±ááŸáá·áº ááá¯ááºáá®áá«áááºá
GitOps á¡ááŒá±áá¶áá°áá»á¬áž
- á áá áºá á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááᯠá¡áááºážá¡ááŒá áºáá¯ááºá¡ááŒá Ạáá±á¬áºááŒáá¬ážáá«áááºá
á áá áºááœá²á·á ááºážáá¯á¶ááœá²á·á ááºážáá¯á¶ááᯠáá¯ááºá¡ááŒá ẠááŸááºáá°áá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááᯠá¡ááŸááºááá¬ážááááºážááŒá áºáá áºáá¯á¡ááŒá Ạáá¯ááºáá±á¬ááºááá·áº Git repository ááœáẠááááºážáááºážááŒá®áž á¡ááá¯á¡áá»á±á¬ááºáá¬ážááŸááºážááŒá±á¬ááºážááá¯ááºáááºá á€áááºážáááºážááẠá áá áºáá»á¬ážááœáẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá áááºáááºááŸáá·áº áá±á¬ááºááŒááºááœá²ááẠááœááºáá°á á±áááºá
- á¡ááá¯ááŸááá±á¬ á¡ááŒá±á¡áá±ááŸáá·áº á áá áºáá»á¬ážá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠGit ááœáẠáááºááŸááºááŒá®áž áá¬ážááŸááºážáá¯ááºáá¬ážáááºá
Git ááœáẠááá¯áá»ááºáá±á¬ á áá áºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠááááºážáááºážááŒá®áž áá¬ážááŸááºážááŒá±á¬ááºážááŒááºážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá áá áºáá»á¬ážááŸáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá¡ááœááºááá° áá¯ááºááŒá®áž ááŒááºááŸáá·áºááá¯ááºáááºááŒá áºáááºá áá¯ááºááá¯ááºááá¯ááºááŸá¯ááᯠááááºážáá»á¯ááºáááºááŸáá·áº áááºážá á á áºááŸááºááŒá±á¬ááºáž á¡áááºááŒá¯ááẠGit á áá¯á¶ááŒá¯á¶áá±áž ááá¹ááá¬ážáá»á¬ážááá¯áááºáž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
- áá¯á¶áá±áááºááŸááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááœá²áá¯ááºááẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸáá áºááá·áº á¡ááá¯á¡áá»á±á¬ááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
Git pull requests áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº repository ááŸá configurations áá»á¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠáááºáá²á·ááá¯á· á¡áá¯á¶ážáá»áááºááᯠá¡ááœááºááá° ááááºážáá»á¯ááºááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááá¯á·á¡á¬áž ááŒááºáááºáá¯á¶ážáááºáááºá¡ááœáẠá¡ááŒá¬ážá¡ááœá²á·áááºáá»á¬ážáᶠáá±ážá¡ááºááá¯ááºááẠááá¯á·ááá¯áẠCI á á áºáá±ážááŸá¯áá»á¬áž á áááºááá¯á·ááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºá
áá áºáá»áááºáááºážááŸá¬áááºá á á®áá¶ááá·áºááœá²áá°á¡á¬áá¬áá»á¬ážááᯠáááºáᬠááŒáá·áºáá±ááẠáááá¯á¡ááºáá«á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠááá¯ááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠááááºážáááºážáá¬ážááá·áº Git repository ááœáẠááá·áºáá»á±á¬áºáá±á¬ááœáá·áºááŒá¯áá»ááºáá»á¬ážááá¯áᬠááá¯á¡ááºáá«áááºá
- á¡ááááºážá¡ááœááºáá²á· áá»á¶á·ááœáá·áºááŸá¯ááŒá¿áá¬ááᯠááŒá±ááŸááºážááŒááºážá
á áá áºáá¡ááá¯ááŸááá±á¬á¡ááŒá±á¡áá±ááᯠGit repository ááœááºááááºážáááºážááŒá®ážáááºááŸáá·áºáá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºáááá·áºá¡áá¬ááŸá¬á áá áºááááºááŸáá¡ááŒá±á¡áá±áááºáááºážáá¡ááá¯ááŸááá±á¬á¡ááŒá±á¡áá±ááŸáá·áºááá¯ááºáá®ááŒá±á¬ááºážáá±áá»á¬á á±ááá·áºáá±á¬á·ááºáá²ááá¯ááŸá¬ááœá±áá«á ááá¯ááá¯á·ááá¯ááºáá«áá áááºáááºáá»á¬ážáá±á«áº áá°áááºá á€áá±á¬á·ááºáá²ááºááẠááœá²ááœá²ááŸá¯ááᯠáááºááŸá¬ážáá áºááẠááá¯á·ááá¯áẠá á®á ááºáááºááŸááºááŸá¯ áá»á¶á·ááœáá·áºááŸá¯á¡ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áááá±ážááá·áºáááºá
OpenShift á¡ááœáẠGitOps áá±á¬áºáááºáá»á¬áž
On-Cluster Resource Reconciler
á€áá¯á¶á á¶á¡áá á¡á á¯á¡áá±ážááœáẠGit repository ááŸá Kubernetes á¡áááºážá¡ááŒá áºáá»á¬áž (YAML ááá¯ááºáá»á¬áž) ááᯠá¡á á¯á¡áá±ážá á¡áááºážá¡ááŒá áºá¡á á áºá¡ááŸááºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááẠáá¬áááºááŸáááá·áº ááááºážáá»á¯ááºáááááá¬áá áºáá¯ááŸááááºá ááœá²ááœá²ááŸá¯áá»á¬ážááᯠááœá±á·ááŸááá«áá ááááºážáá»á¯ááºáá°ááẠá¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáá»á¬ážááᯠáá±ážááá¯á·ááŒá®áž ááœá²ááœá²ááŸá¯áá»á¬ážááᯠááŒá¯ááŒááºááẠáá¯ááºáá±á¬ááºááá¯ááºáááºá ဠGitOps áá±á¬áºáááºááᯠAnthos Config Management ááŸáá·áº Weaveworks Flux ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá
ááŒááºáá¡áááºážá¡ááŒá áºááŒááºáááºááŸáááŸáá¯ááºážáá±ážááŸá°áž (ááœááºážá¡á¬ážáá±ážáá°)
áá»áœááºá¯ááºááá¯á·ááœáẠ"Git repository - Kubernetes á¡á á¯á¡áá±áž" á¡ááœá²áá»á¬ážááœáẠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááẠáá¬áááºááŸáááá·áº ááááºážáá»á¯ááºáá°áá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ ááááºážáá»á¯ááºáá°ááŸáááá·áºá¡áá« á€áá¯á¶á á¶ááᯠááááºáá¯á¶á á¶á ááœá²ááŒá¬ážááŸá¯á¡ááŒá Ạáá°áááá¯ááºáááºá á€áá±áá¬ááœáẠááŒá¬ážáá¬ážáá»ááºááŸá¬ á á®áá¶ááá·áºááœá²áá¬ážáá±á¬ á¡á á¯á¡áá±ážáá áºáá¯á á®ááœáẠáááºážá áá®ážááŒá¬áž ááááºážáá»á¯ááºáááááᬠááá«ááŸáááŒááºážááŒá±á¬áá·áº ááŒá áºáááºá Git - k8s á¡á á¯á¡áá±ážá¡ááœá²áá»á¬ážááᯠCRDs (á áááºááŒáá¯ááºáááºážááŒá Ạá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬áž) á¡ááŒá ẠáááºááŸááºáá±á·ááŸáááŒá®áž ááááºážáá»á¯ááºáá°ááẠáááºáá°áá»á¡á±á¬ááºáá¯ááºáá±á¬ááºááá·áºáá¯á¶ááᯠáá±á¬áºááŒááá¯ááºáááºá á€áá¯á¶á á¶ááœááºá ááááºážáá»á¯ááºáá°áá»á¬ážááẠCRD ááœááºáá±á¬áºááŒáá¬ážáá±á¬ Git ááá¯ááŸá±á¬ááºááŸá¯ááᯠCRD ááœááºáá±á¬áºááŒáá¬ážáá±á¬ Kubernetes á¡á á¯á¡áá±ážá¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºáᬠááŸáá¯ááºážááŸááºááŸá¯ááááºáá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶á ááá·áºáá»á±á¬áºáá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá á¡áá°ážáááŒáá·áºá ဠGitOps áá±á¬áºáááºááᯠArgoCD ááœááºá¡áá¯á¶ážááŒá¯áááºá
OpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠGitOps
Multi-cluster Kubernetes á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠá á®áá¶ááá·áºááœá²ááŒááºážá
Kubernetes áá»á¶á·ááŸá¶á·ááŸá¯ááŸáá·áº multi-cloud ááá¬áá»á°áá¬áá»á¬ážááŸáá·áº edge computing ááá¯á·á áá±áááºážá á¬ážáá¬ááŸá¯ááŸáá·áºá¡áá°á áá¯á¶ážá áœá²áá°áá áºáŠážáá»áŸáẠOpenShift á¡á á¯á¡áá±ážáá»á¬ážá áá»ááºážáá»áŸá¡áá±á¡ááœááºáááºáááºáž ááá¯ážáá¬áá«áááºá
á¥ááá¬á¡á¬ážááŒáá·áºá edge computing ááá¯á¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœááºá áá±á¬ááºáááºáá áºáŠážáá¡á á¯á¡áá±ážáá»á¬ážááᯠáá¬ááŸáá·áºáá»á® ááá¯á·ááá¯áẠáá±á¬ááºááŸáá·áºáá»á®á á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááááºá¡áá±ááŒáá·áºá áá°ááẠá¡áá»á¬ážáá°ááŸá¬ cloud ááŸáá·áº áááá¯ááºá¡ááœááºážááœáẠáá®ážááŒá¬áž ááá¯á·ááá¯áẠááŸáááŸáá¯ááºážáá¬ážáá±á¬ OpenShift á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááᯠá á®áá¶ááá·áºááœá²ááẠááá¡á¬ážáá±ážáá¶ááááºá
á€ááá á¹á ááœááºá á¡áá°ážáááŒáá·áº ááŒá¿áá¬áá»á¬ážá áœá¬ááᯠááŒá±ááŸááºážááááºááŒá áºáá«áááºá
- á¡á á¯á¡áá±ážáá»á¬ážááẠáá°áá®ááá·áºá¡ááŒá±á¡áá±ááœáẠááŸááá±ááŒá±á¬ááºáž ááááºážáá»á¯ááºáá« (configsá á á±á¬áá·áºááŒáá·áºááŸá¯á ááá¯ááŸá±á¬ááºááŸá¯ á áááº
- ááááŸááá¬ážááá·áº á¡ááŒá±á¡áá±áá áºáá¯á¡áá±á«áº á¡ááŒá±áá¶á á¡á á¯á¡áá±ážáá»á¬ážááᯠááŒááºáááºáááºáá®ážáá« (ááá¯á·ááá¯ááº) ááŒááºáááºááá°áá«á
- áá°áááá»á¬ážáá±á¬ááŒááºáááºáá áºáá¯á¡áá±á«áºá¡ááŒá±áá¶á á¡á á¯á¡áá±ážá¡áá áºáá»á¬ážáááºáá®ážáá«á
- OpenShift á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá áááºáá«á
- OpenShift á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááŸá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒááºááŸáá·áºáá«á
- ááá°áá¬áá¯á¶á á¶ááœá²á·á ááºážááŸá¯áá»á¬ážááᯠááá°áá®áá±á¬áááºáááºážáá»ááºáá»á¬ážááá¯á· áá»áááºáááºáá«á
áá»áŸá±á¬ááºááœáŸá¬áá¯á¶á á¶áá»á¬áž
áááºážááá¯á·áááá ááºáááºážá¡ááœááºážá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠáá¯ááºáá¯ááºááŸá¯á¡á á¯á¡áá±ážááœáẠáááŒá®ážáá¯á¶ážáá® á¡á á¯á¡áá±ážáá áºáᯠ(devá á¡ááá·áºá á áááº) ááᯠááŒááºáááºážáá±á·ááŸááááºá ááá¯á·á¡ááŒááºá áááŸáááá¯ááºááŸá¯ááŸáá·áº á¡ááœááºá¡á á¬áž ááá¯á¡ááºáá»ááºáá»á¬ážááŒá±á¬áá·áº áá¯á¶ážá áœá²áá°áá»á¬ážááẠá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááá¯ááºá¡ááœááºážááŸá á¡á á¯á¡áá±ážáá»á¬áž ááá¯á·ááá¯áẠá¡áá»á¬ážáá°ááŸá¬ cloud ááááºáá±á¬ááºážá áá±áá¬á¡áá»á¬ážá¡ááŒá¬ážááœáẠáááŒá¬áá á¡áá¯á¶ážááŒá¯ááŒáááºá
á€ááá á¹á ááœááºá á¡á±á¬ááºáá«áá¬áááºáá»á¬ážááá¯ááŒá±ááŸááºážááááºá
- á¡á á¯á¡ááœá²á·áá»á¬áž (devá á¡ááá·áºá á áááºááŒáá·áº) á¡ááŒá¬áž á¡ááá®áá±ážááŸááºážáá»á¬áž (binariesá configs á áááº) ááœá±á·áá»á¬ážááŸá¯ááᯠáá±áá»á¬áá«á á±á
- OpenShift á¡á á¯á¡áá±ážáá»á¬ážá áœá¬ááŸá á¡ááá®áá±ážááŸááºážáá»á¬áž (binariesá configs á áááºááŒáá·áº) á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá áááºáá«á
- á¡ááá®áá±ážááŸááºážáá»á¬ážááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááááºáááá¬ážááá·áº á¡ááŒá±á¡áá±ááá¯á· ááŒááºááŸáá·áºáá«á
OpenShift GitOps á¡áá¯á¶ážááŒá¯ááŸá¯ááá á¹á áá»á¬áž
1. Git repository á០á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
á¡á á¯á¡áá±ážá á®áá¶ááá·áºááœá²áá°ááẠOpenShift á¡á á¯á¡áá±ážááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠGit ááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážááá¯ááºááŒá®áž áááºážááá¯á·á¡á¬áž á¡á á¯á¡áá±ážá¡áá áºáá»á¬ážáááºáá®ážáááºá¡ááœáẠá¡ááá¯á¡áá»á±á¬ááºá¡áá¯á¶ážááŒá¯áᬠáááºážááá¯á·ááᯠGit ááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážáá¬ážááá·áº áááá¬ážááá·áºá¡ááŒá±á¡áá±ááŸáá·áº áááºáá°ááŒá áºáá±á¬ á¡ááŒá±á¡áá±áá áºáá¯á¡ááŒá Ạáááºážááá¯á·ááᯠáá°áá±á¬ááºáá¬ááá¯ááºáááºá
2. áá»áŸáá¯á·ááŸááºáááºáá±áá»á¬ááŸáá·áº áááºáá°ááŒá¯ááŒááºážá
á á®áá¶ááá·áºááœá²áá°ááẠáááºážá¡ááœáẠá¡áá°ážáááºáá®ážáá¬ážáá±á¬ áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážááá¯á·á¡á¬áž á á®áá¶ááá·áºááœá²áááºá¡ááœáẠVault áá²á·ááá¯á·áá±á¬ ááá·áºáá»á±á¬áºáá±á¬áá±á¬á·ááºáá²ááŒáá·áº OpenShift áá»áŸáá¯á·ááŸááºá¡áá¬áá»á¬ážááᯠáá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááá¯ááºááŸá¯ááŸáááºáž á¡áá»áá¯ážáá»á±ážáá°ážáááŸááááºááŒá áºáááºá
3. áá»á¶á·ááœáá·áºááŸá¯áá¯á¶á á¶áá»á¬ážááᯠááááºážáá»á¯ááºááŒááºážá
OpenShift GitOps ááá¯ááºááá¯ááºá á á áºááŸááºáá±á¬ááœá²á·á ááºážáá¯á¶áá»á¬ážááŸáá·áº ááá¯ááŸá±á¬ááºááŸá¯ááœáẠáááºááŸááºáá¬ážááá·áºá¡áá¬áá»á¬ážááŒá¬áž ááœá²ááœá²ááŸá¯áá»á¬ážááᯠááœá²ááŒá¬ážááááŒááºááŒá®áž ááááá±ážáá«á á¡ááºááááºááᬠáá±á¬ááºáá¶áá²áá±ážáááºááŒá áºáááºá
4. á á®á ááºááœá²á·á ááºážááŸá¯ áá»á¶á·ááœáá·áºááŒááºážá¡ááŒá±á¬ááºáž á¡ááŒá±á¬ááºážááŒá¬ážáá»ááºáá»á¬áž
á á®áá¶ááá·áºááœá²áá°ááẠááá·áºáá»á±á¬áºáá±á¬á¡á á®á¡áá¶áá»á¬ážááᯠáá°á·áá¬áá¬áá° áá»ááºááŒááºá áœá¬áá±á¬ááºááœááºááá¯ááºáááºá¡ááœáẠá á®áá¶ááœá²á·á ááºážááŸá¯ áá»á¶á·ááœáá·áºááŸá¯á¡ááŒá±á¬ááºáž á¡ááŒááºáá±á·áá¬ááá¯ááá·áºá¡áá« áááºážááá¯á·ááẠá¡áá¯á¶ážáááºáá«áááºá
5. áá»á±á¬áá«áá±áá»áááºááœáẠáá¯á¶á á¶áá»á¬ážááᯠáááºááŒáá·áºáááºáá°ááŒá¯ááŒááºážá
á á®áá¶ááá·áºááœá²áá°á¡á¬áž OpenShift á¡á á¯á¡áá±ážááᯠGit repository ááŸáá·áº áá áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºáááºá ááááºáááá¬ážáá±á¬ á¡ááŒá±á¡áá±ááá¯á· áá»ááºááŒááºá áœá¬ ááŒááºááœá¬ážáááºá á¡á á¯ááᯠá¡ááŒááºááŒááºááá¯á·ááẠááœáá·áºááŒá¯áááºá
6. ááœáá·áºáá»á±á¬áá±áá±á¬á¡áá«ááœáẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠáááºáá°ááŒá¯ááŒááºážá
Drift ááᯠááœá±á·ááŸááá±á¬á¡áá« ááá¯ááŸá±á¬ááºáááºážááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠáááºáá°áá»á á±ááẠá á®áá¶ááá·áºááœá²áá°ááẠOpenShift á¡á á¯á¡áá±ážááᯠá á®á ááºáááºááŸááºááá¯ááºáááºá ááá¯á·ááŸáᬠá¡á á¯á¡áá±ážááœá²á·á ááºážáá¯á¶ááẠGit ááŸá configuration áá»á¬ážááŸáá·áº á¡ááŒá²ááá¯ááºáá®áá±á á±áááºá
7. á¡á á¯á¡áá±ážá¡áá»á¬ážá¡ááŒá¬áž - ááá¯ááŸá±á¬ááºáá¯á¶áá áºáá¯
á á®áá¶ááá·áºááœá²áá°ááẠGit repository áá áºáá¯ááœáẠááá°áá®áá±á¬ OpenShift á¡á á¯á¡áá±ážáá»á¬ážá áœá¬á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠááááºážáááºážááá¯ááºááŒá®áž ááá¯á¡ááºáááᯠááœá±ážáá»ááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
8. á¡áááºá¡á±á¬áẠá¡á á¯á¡á ááºážááœá²á·á ááºážáá¯á¶áá»á¬áž (á¡ááœá±áááºáá¶ááŸá¯)
á á®áá¶ááá·áºááœá²áá°ááẠááá¯ááŸá±á¬ááºááŸá¯ááœáẠá¡á á¯á¡á ááºážááœá²á·á ááºážáá¯á¶áá»á¬ážááᯠá¡ááá·áºááá·áºáááºááŸááºááá¯ááºááẠ(á¡ááá·áºá áá¯ááºáá¯ááºá á¡ááºááºá¡á á¯á á¯á á áááºááŒáá·áº á¡ááœá±áááºáá¶ááŸá¯)á áá áºáááºážááá¯ááá±á¬áºá áááºážááẠá¡á á¯á¡áá±ážáá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ á¡á á¯á¡áá±ážáá»á¬ážá¡ááœáẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠá¡áá¯á¶ážáá»ááá·áºáááá·áºááᯠáá¯á¶ážááŒááºááá¯ááºáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá á á®áá¶ááá·áºááœá²áá°áá áºáŠážááẠGit ááá¯ááŸá±á¬ááºááŸá¯ááœáẠâáá¯ááºáá¯ááºááŸá¯á¡á á¯á¡áá±ážáá»á¬áž (áá¯ááºáá¯ááºáá»á¬áž) â System X á¡á á¯á¡áá±ážáá»á¬áž â á áá ẠX áá¯ááºáá¯ááºááŸá¯á¡á á¯á¡áá±ážáá»á¬ážâ ááᯠá¡áááºáááºážáááºááŸááºáááºááŸááºáá«áá ááá¯á·áá±á¬áẠá áá ẠX á áá¯ááºáá¯ááºááŸá¯á¡á á¯á¡áá±ážááœáẠá¡á±á¬ááºáá« configs áá»á¬ážááᯠáá±á«ááºážá ááºá¡áá¯á¶ážááŒá¯áááº-
- áá¯ááºáá¯ááºááŸá¯ á¡á á¯á¡áá±ážá¡á¬ážáá¯á¶ážá¡ááœáẠáá¯á¶ááœá²á·á ááºážáá¯á¶áá»á¬ážá
- System X á¡á á¯á¡áá±ážá¡ááœáẠááŒááºáááºááŸá¯áá»á¬ážá
- X á áá áºáá¯ááºáá¯ááºááŸá¯á¡á á¯á¡áá±ážá¡ááœáẠááŒááºáááºááŸá¯áá»á¬ážá
9. Templates ááŸáá·áº configuration overrides
á¥ááá¬á¡á¬ážááŒáá·áºá á á®áá¶ááá·áºááœá²áá°ááẠáááºážááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº áá®ážááŒá¬áž á¡á á¯á¡áá±ážáá»á¬ážá¡ááœáẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠáá±á¬ááºážá áœá¬áá»áááºááŸáááẠá¡ááœá±áááºáá¶áá¬ážáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶á¡á á¯á¶ááŸáá·áº áááºážááá¯á·ááááºááá¯ážáá»á¬ážááᯠá¡á á¬ážááá¯ážááá¯ááºáááºá
10. ááœá±ážáá»ááºááŸá¯ááá·áºááœááºážááŒááºážááŸáá·áº áááºáá¯ááºááŒááºážáá»á¬ážá á¡ááá®áá±ážááŸááºážááœá²á·á ááºážáá¯á¶áá»á¬áž
á á®áá¶ááá·áºááœá²áá°ááẠá¡ááºááºáá®áá±ážááŸááºážá¡ááœáẠááá¯á·ááá¯áẠá¡áá»áá¯á·áá±á¬ááœá²á·á ááºážáá¯á¶áá¯á¶á á¶áá»á¬ážá á¡ááá®áá±ážááŸááºážááá¯ááºáá±á¬ á¡áá»áá¯á·áá±á¬áááá±áááá¹ááá¬áá»á¬ážááŒáá·áº á¡á á¯á¡áá±ážáá»á¬ážááá¯á· áááºááŸááºááá¯ááºáááºá
11. Template áá¶á·ááá¯ážááŸá¯
á¡ááºááá®áá±ážááŸááºážáááºážááŒá áºáá»á¬ážááᯠáááºáá²á·ááá¯á·áááºááŸááºááẠ(Helm Chartá Pure Kubernetes yaml á áááºááŒáá·áº) á¡ááºááá®áá±ážááŸááºážáá áºáá¯á á®á¡ááœáẠá¡ááá·áºáá»á±á¬áºáá¯á¶ážáá±á¬áºáááºááᯠá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠDeveloper áá»á¬ážááẠá¡áá»áá¯ážáá»á±ážáá°ážáááŸááááºááŒá áºáááºá
OpenShift ááááºáá±á¬ááºážááŸá GitOps áááááá¬áá»á¬áž
ArgoCD
ArgoCD ááẠExternal Resource Reconcile áá±á¬áºáááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž á¡á á¯á¡ááœá²á·áá»á¬ážááŸáá·áº Git repositories áá»á¬ážááŒá¬áž áá áºáá¯ááŸáá áºáá¯ááá¯á· á¡áá»á¬ážá¡ááŒá¬áž áááºáá¶áá±ážááᯠááŒáá¯ážááá¯ááºáááºá¡ááœáẠáááá¯áá»á¯ááºááá¯ááºáá¬ážáá±á¬ UI ááᯠáá±ážáá±á¬ááºáá«áááºá á€áááá¯ááááºáá¡á¬ážáááºážáá»ááºáá»á¬ážááœáẠArgoCD á¡áá¯ááºááá¯ááºáá±á¬á¡áá«ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá¯ááºá áœááºážáááŸáááŒááºážá
á á®ážáááºáž
Flux ááẠOn-Cluster Resource Reconcile áá±á¬áºáááºááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºááŒá®áž ááááºá¡áá±ááŒáá·áº á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºá áááá¯áá»á¯ááºááá¯ááºááŸá¯ á á®áá¶ááá·áºááœá²ááŒááºáž áááŸáááŒá±á¬ááºážá á¡á¬ážáááºážáá±á¬á¡áá»ááºááŒá áºáááºá á¡ááŒá¬ážáá áºáááºááœááºá á¡ááá¡áá»á¡á¬ážááŒáá·áº áááá¯áá»á¯ááºááá¯ááºááŸá¯ áááŸáááŒááºážááŒá±á¬áá·áºá á¡á á¯á¡ááœá²á·áá áºáá¯á០áá¡á±á¬ááºááŒááºáá±á¬áºáááºáž á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá¯ááºááŸá¯ááŸá¬ ááŸááá±áá±ážáááºá
OpenShift ááœáẠArgoCD ááá¯ááá·áºááœááºážááŒááºážá
ArgoCD ááẠá¡ááœááºáá±á¬ááºážááœááºáá±á¬ command line interface ááŸáá·áº web console ááᯠáá±ážá áœááºážáá±á¬ááŒá±á¬áá·áº Flux ááŸáá·áº á¡ááŒá¬ážáá±á¬ á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá»á¬ážááᯠá€áá±áá¬ááœáẠá¡áá»á¯á¶ážááááºáá«á
OpenShift 4 ááááºáá±á¬ááºážáá±á«áºááœáẠArgoCD ááá¯á¡áá¯á¶ážááŒá¯áááºá á¡á á¯ááá¯ááºá á®áá¶ááá·áºááœá²áá°á¡ááŒá Ạá€á¡ááá·áºáá»á¬ážááᯠááá¯ááºáá¬áá«-
OpenShift ááááºáá±á¬ááºážáá±á«áºááœáẠArgoCD á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááŒáá·áºáá»ááºááŒááºážá
# Create a new namespace for ArgoCD components
oc create namespace argocd
# Apply the ArgoCD Install Manifest
oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.2/manifests/install.yaml
# Get the ArgoCD Server password
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
OpenShift Route ááŒáá·áºááŒááºááá¯ááºá á±ááẠArgoCD Server áááá¯ážáááºááŸá¯
# Patch ArgoCD Server so no TLS is configured on the server (--insecure)
PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
oc -n argocd patch deployment argocd-server -p $PATCH
# Expose the ArgoCD Server using an Edge OpenShift Route so TLS is used for incoming connections
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
ArgoCD Cli Tool ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
# Download the argocd binary, place it under /usr/local/bin and give it execution permissions
curl -L https://github.com/argoproj/argo-cd/releases/download/v1.2.2/argocd-linux-amd64 -o /usr/local/bin/argocd
chmod +x /usr/local/bin/argocd
ArgoCD Server á á®áá¶ááá·áºááœá²áá° á áá¬ážááŸááºááᯠááŒá±á¬ááºážáá²ááŒááºážá
# Get ArgoCD Server Route Hostname
ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
# Login with the current admin password
argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
# Update admin's password
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password
á€á¡ááá·áºáá»á¬ážááŒá®ážáá«áá áááºááẠArgoCD WebUI áááºááœááºááá¯ážáẠááá¯á·ááá¯áẠArgoCD Cli á¡áááá·áºáá±ážááá·áºááá¯ááºážáá°ážááºááŸáááá·áº ArgoCD áá¬áá¬ááŸáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºá
GitOps - áááºáá±á¬á·á០áá±á¬ááºááá»áá°ážá
âááá¬ážááœááºááœá¬ážááŒá®â - áá áºáá¯áá¯áá¯ááºááœáá·áº ááœááºááœá¬ážááá·áº á¡ááŒá±á¡áá±áá áºáá¯á¡ááŒá±á¬ááºáž áá°ááá¯á·ááŒá±á¬ááá·áºá áá¬ážá OpenShift áá¡ááŒá±á¡áá±ááœááºá á€á¡á±ážááŒáá±á¬ááááºáá±á¬ááºážá¡áá áºááᯠáá»ááºáá»ááºážá áááºá¡áá¯á¶ážááŒá¯ááá¯áá±á¬ááá¹áááẠáááºážááŒá±á¬ááºážáá»á¬ážá ááŒáá·áºáá»ááºááŸá¯áá»á¬ážááŸáá·áº á¡ááŒá¬áž OpenShift á¡áá¬ááá¹áá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááŒááºážááŸáá·áº ááááºážááááºážááŒááºážááá¯á·ááŒáá·áº á€á¡ááŒá±á¡áá±ááᯠá¡ááá¡áá»áááºáá®ážáá±ážáá±á·ááŸááááºá áá«áá±ááá·áº á¡ááœáá·áºá¡áá±ážá á¡ááŒá²áááºáž ááœááºááœá¬ážááá¬ážá
áá±á¬ááºážáá«ážááœá²áá»á¬ážá¡ááŒá±á¬ááºáž áááºáá±ážáááºá
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/namespace.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/deployment.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/service.yaml
oc expose svc/httpd -n simple-app
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááœáẠáááºááŒáá·áºááŒá¯áá¯ááºáá¬ážáá±á¬ application áá áºáá¯ááŸááááºá ááá¯áááŸáááá¯ááºááŸá¯áá¯á¶ážááŸá¯á¶ážááŒááºážáááŸááá²áááºážááᯠGitOps á á®áá¶ááá·áºááœá²ááŸá¯á¡á±á¬ááºááœááºááœáŸá²ááŒá±á¬ááºážáááºááá¯á¡ááºáááºá á¡ááá¯áá»á¯ááºááŒá±á¬ááá»áŸááºá
- áá¯ááºá¡ááœáẠGit repository áá áºáá¯áááºáá®ážáá«á
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºááŸáá¡áá¬ááá¹áá¯áá»á¬ážááᯠáááºááá¯á·ááŒá®áž áááºážááá¯á·ááᯠGit repository ááá¯á· á¡ááºáá¯ááºáá¯ááºáá«áááºá
- GitOps áááááá¬áá»á¬ážááᯠááœá±ážáá»ááºááŒááºážááŸáá·áº á¡áá¯á¶ážááŒá¯ááŒááºážá
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á ááá¯ááŸá±á¬ááºááŸá¯á¡á¬áž á€áááááá¬áááááá¬á¡á á¯á¶ááœáẠááá·áºáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á GitOps toolkit ááœáẠá¡ááá®áá±ážááŸááºážááᯠáááºááŸááºáá«áááºá
- áá»áœááºá¯ááºááá¯á·ááẠGitOps áááááá¬áááºáá¬ááá¬ááᯠá¡áá¯á¶ážááŒá¯á á¡ááá®áá±ážááŸááºážá á ááºážáááºááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá
- áá»áœááºá¯ááºááá¯á·ááẠGitOps áááááá¬áááºáá¬ááá¬ááᯠá¡áá¯á¶ážááŒá¯á á¡áá¬ááá¹áá¯áá»á¬ážááᯠáááºáá°ááŒá¯áá«áááºá
- á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒááºáá±á¬ááºááŒááºážááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠáááºáá°ááŒá¯ááŒááºážááᯠááœáá·áºáá«á
á¡áááºáááŒá±á¬áá²á·áááá¯áá«áá²á
áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá áá»áœááºá¯ááºááá¯á·ááẠGitHub ááœáẠá¡áá»á¬ážáá°ááŸá¬ ááá¯ááŸá±á¬ááºááŸá¯á¡áá áºáá áºáá¯ááᯠáááºáá®ážáá«áááºá ááŒáá¯ááºááá±á¬ááºáá±á«áºááá¯á·ááááºá áá«ááá¯á·á blogpost ááá¯áá²á· áá¬áááºááá¯áá¯á¶ážáááºá
YAML á¡áá¬ááá¹áá¯ááá¯ááºáá»á¬ážááᯠá ááºááœááºáž ááá¯á·ááá¯áẠGit ááœáẠááááºážáááºážááá¬ážáá«áá áááºááẠoc ááá¯á·ááá¯áẠkubectl binaries ááᯠá¡áá¯á¶ážááŒá¯ááááºááŒá áºáá«áááºá á¡á±á¬ááºáá±á¬áºááŒáá« áááºáá¬ážááŒááºáá¬ááºáá¯á¶ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡áááºáá±áá¬á ááŒáá·áºáá»ááºááŸá¯á áááºáá±á¬ááºááŸá¯ááŸáá·áº áááºážááŒá±á¬ááºážá¡ááœáẠYAML ááᯠáá±á¬ááºážááá¯áá±áá«áááºá áááºážáááá¯ááºáá®ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá áºáááºáá®ážáá¬ážáá±á¬ repository ááŸáá·áº cd ááᯠáááºážááœááºáá¯á¶áá°ááœá¬ážáá¬ážáááºá
oc get namespace simple-app -o yaml --export > namespace.yaml
oc get deployment httpd -o yaml -n simple-app --export > deployment.yaml
oc get service httpd -o yaml -n simple-app --export > service.yaml
oc get route httpd -o yaml -n simple-app --export > route.yaml
ááᯠArgo CD á áá·áºááºáá¯ááºááááá±á¬ á¡ááœááºááᯠáááºááŸá¬ážááẠdeployment.yaml ááá¯ááºááᯠáááºážááŒááºááŒáá«á áá¯á·á
sed -i '/sgeneration: .*/d' deployment.yaml
ááá¯á·á¡ááŒáẠáááºážááŒá±á¬ááºážááŒá±á¬ááºážááẠááá¯á¡ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááá¡ááŒááẠMultiline variable ááᯠáááºááŸááºááŒá®áž ingress ááᯠá¡á á¬ážááá¯ážáá«áááº- ááᯠvariable á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŸáá·áº nullá
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/$ROUTE/g" route.yaml
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá»á¬ážááᯠááœá²áá¯ááºááŒá®áž áá»ááºá¡á¬ážáá¯á¶ážááẠáááºážááá¯á·ááᯠGit repository ááœáẠááááºážáááºážáááºááŒá áºáááºá áááºážáá±á¬ááºááœáẠá€ááááºážáááºážááŸá¯ááẠáá áºáá¯áááºážáá±á¬ ááááºážá¡áá»ááºá¡áááºá¡áááºážá¡ááŒá áºááŒá áºáá¬ááŒá®áž á¡áá¬ááá¹áá¯áá»á¬ážááá¯á· áááºááŒáá·áºááŒá±á¬ááºážáá²ááŒááºážááŸááºááá»áŸááᯠáááºážááŒááºá áœá¬áá¬ážááŒá áºááá·áºáááºá
git commit -am âinitial commit of objectsâ
git push origin master
ááẠArgoCD ááá¯á¡áá¯á¶ážááŒá¯áá¬ážááŒá®ážááŒá
áºááẠ(áááºážááá¯áááºááá¯á·ááŒá¯áá¯ááºáááẠ- ááááºááŒáá·áºááŸá¯áá«á
argocd repo add https://github.com/cooktheryan/blogpost
ááᯠapplication ááá¯áááºáá®ážááŒáá«á áá¯á·á á¡ááá®áá±ážááŸááºážááẠá¡áá¬ááá¹áá¯áá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááẠOpenShift ááá¯á¡ááºáááºá áááºááá·áº repository á áá®ážááŒá¬ážáá¬áááœá² ááá¯á¡ááºáááºá á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠá áá·áºááºáá¯ááºááá·áºáááºáá»á¬ážááᯠGitOps toolkit á០áá¬ážáááºá á±áááºá¡ááœáẠáááºááá¯ážáá»á¬ážááᯠáááºááŸááºáá±ážáá«áááºá
argocd app create --project default
--name simple-app --repo https://github.com/cooktheryan/blogpost.git
--path . --dest-server https://kubernetes.default.svc
--dest-namespace simple-app --revision master --sync-policy none
á¡ááá®áá±ážááŸááºážáá
áºáá¯á¡á¬áž Argo CD ááœáẠáááºááŸááºáá¬ážáááºááŸáá·áºáá
áºááŒáá¯ááºáááºá ááá¯ááŸá±á¬ááºááŸá¯ááœáẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºáá»á¬ážááŸáá·áº áááºáááºá áááááá¬á¡á
á¯á¶ááẠá
áááºá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬ á¡áá¬ááá¹áá¯áá»á¬ážááᯠá
á
áºáá±ážáááºááŒá
áºáááºá áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœááºá á¡ááá¯á¡áá»á±á¬ááºá
áá·áºááºáá¯ááºááŒááºážááŸáá·áº ááŸááºážáááºážááŒááºážááá¯á·ááᯠááááºáá¬ážáá±á¬ááŒá±á¬áá·áº á¡á
áááºá¡ááá¯ááºážáá»á¬áž áááŒá±á¬ááºážáá²áá±ážáá«á ArgoCD áá¶á·ááá¯ážáá±ážáá±á¬ á¡ááœáŸááºážáááŸááá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááœáẠArgo CD áá»ááºááŸá¬ááŒááºááœáẠ"Out of Sync" áᯠááŸááºáá¬ážáá¬ážááá«áááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡áááºážáááºááŒá¬áá±á¬á¡áá« áááºáá°ááŒá¯ááŒááºážá¡á¬áž á
áááºáá±á¬á¡áá«á á¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒááºáááºá¡áá¯á¶ážáá»áááºááá¯ááºáá«á
ááᯠáá»áœááºá¯ááºááá¯á·áááá¯ááºáá»á¬ážááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážáááŸáááŒá±á¬ááºáž áá±áá»á¬á á±ááẠá ááºážáááºááŸá¯áá áºáá¯ááᯠáá¯ááºáá±á¬ááºááŒáá«á áá¯á·á
argocd app sync simple-app --dry-run
á¡ááŸá¬ážá¡ááœááºážáá»á¬ážáááŸááá«áá áááºááẠáááºáá°ááŒá¯ááŒááºážááá¯á· áááºáááºáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá
argocd app sync simple-app
áá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážáá±á«áºááŸá argocd get command ááᯠrun ááŒá®ážáá±á¬ááºá á¡ááá®áá±ážááŸááºážá¡ááŒá±á¡áá±ááẠHealthy ááá¯á·ááá¯áẠSynced ááá¯á·ááŒá±á¬ááºážáá²ááœá¬ážáááºááá¯ááœá±á·ááá«áááºá ááá¯ááá¯áááºááŸá¬ Git repository á¡ááœááºážááŸá á¡áááºážá¡ááŒá áºáá»á¬ážá¡á¬ážáá¯á¶ážááẠááá¯á¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº áááºááá¯ááºáááºáᯠááá¯ááá¯áá«áááºá
argocd app get simple-app
Name: simple-app
Project: default
Server: https://kubernetes.default.svc
Namespace: simple-app
URL: https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo: https://github.com/cooktheryan/blogpost.git
Target: master
Path: .
Sync Policy: <none>
Sync Status: Synced to master (60e1678)
Health Status: Healthy
...
ááá¯ááœáẠáááºááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááá¯ááºááá¯ááºáááºáá®ážáá¬ážááŒááºážáááŸáááŒá±á¬ááºáž áá±áá»á¬á á±ááẠá¡ááá¯á¡áá»á±á¬áẠá áá·áºááºáá¯ááºááŒááºážááŸáá·áº ááŸááºážáááºážááŒááºážááá¯á·ááᯠááœáá·áºááá¯ááºááŒá®áž á¡áá¬ááá¹áá¯áá áºáá¯á¡á¬áž ááá¯ááŸá±á¬ááºááŸá¯ááá¯á· ááœááºážáá¶ááá·áºá¡áá«ááá¯ááºážá ááŒáá·áºáá»ááºááŸá¯áá áºáᯠááŒá áºáá±á«áºáááºááŒá áºáááºá
argocd app set simple-app --sync-policy automated --auto-prune
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á
ááá¯ááºážááœáẠGitOps ááᯠáááºááá·áºáááºážááŒáá·áºáá»áŸ á¡áá¯á¶ážáááŒá¯áá²á·áá±á¬ GitOps ááááºážáá»á¯ááºááŸá¯á¡á±á¬ááºááœáẠá¡ááá®áá±ážááŸááºážáá
áºáá¯ááᯠá¡á±á¬ááºááŒááºá
áœá¬ áá°áá±á¬ááºáá¬áá²á·áááºá
source: www.habr.com