æ¬æ¥ã¯ãGitOpsã®ååãšã¢ãã«ããããŠãããã®ã¢ãã«ãOpenShiftãã©ãããã©ãŒã äžã§ã©ã®ããã«å®è£ ãããŠãããã«ã€ããŠè§£èª¬ããŸãããã®ãããã¯ã«é¢ããã€ã³ã¿ã©ã¯ãã£ãã¬ã€ãã¯ãã¡ããã芧ãã ããã .

ç°¡åã«èšããšãGitOpsãšã¯ãGitãã«ãªã¯ãšã¹ããçšããŠã€ã³ãã©ã¹ãã©ã¯ãã£ãšã¢ããªã±ãŒã·ã§ã³ã®æ§æã管çããããã®äžé£ã®ãã©ã¯ãã£ã¹ã§ããGitOpsã¯ãGitãªããžããªãã·ã¹ãã ã®ç¶æ
ã«é¢ããåäžã®æ
å ±æºãšããŠæ±ãããã®ç¶æ
ãžã®ãããã倿Žãå®å
šã«è¿œè·¡ã»ç£æ»å¯èœã«ããŸãã
GitOpsã«ããã倿Žè¿œè·¡ã®èãæ¹ã¯æ°ãããã®ã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒããæ±ãéã«ããã®ã¢ãããŒãã¯é·å¹Žã«ãããã»ãŒæ®éçã«äœ¿çšãããŠããŸãããGitOpsã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãšã¢ããªã±ãŒã·ã§ã³ã®æ§æã管çããéã«ããœãŒã¹ã³ãŒã管çãšåæ§ã®æ©èœïŒã¬ãã¥ãŒãã§ãã¯ããã«ãªã¯ãšã¹ããã¿ã°ãªã©ïŒãå®è£
ããã ãã§ããœãŒã¹ã³ãŒã管çãšåæ§ã®ã¡ãªãããæäŸããŸãã
GitOps ã«ã¯åŠè¡çãªå®çŸ©ãã«ãŒã«ã»ããã¯ãªããå®è·µãå°ãäžé£ã®ååã®ã¿ããããŸãã
- ã·ã¹ãã ã®å®£èšçãªèª¬æã¯ Git ãªããžã㪠(æ§æãç£èŠãªã©) ã«ä¿åãããŸãã
- ç¶æ ã®å€æŽã¯ãã« ãªã¯ãšã¹ããéããŠè¡ãããŸãã
- å®è¡äžã®ã·ã¹ãã ã®ç¶æ ã¯ãGit ããã·ã¥ ãªã¯ãšã¹ãã䜿çšããŠãªããžããªå ã®ããŒã¿ãšäžèŽãããŸãã
GitOpsã®åå
- ã·ã¹ãã å®çŸ©ã¯ãœãŒã¹ã³ãŒããšããŠèšè¿°ãããŸãã
ã·ã¹ãã æ§æã¯ã³ãŒããšããŠæ±ããããããGitãªããžããªã«ä¿åãããèªåçã«ããŒãžã§ã³ç®¡çãããŸããGitãªããžããªã¯ãä¿¡é Œã§ããå¯äžã®æ å ±æºãšããŠæ©èœããŸãããã®ã¢ãããŒãã«ãããã·ã¹ãã ãžã®å€æŽã®ããŒã«ã¢ãŠããšããŒã«ããã¯ã容æã«ãªããŸãã
- ã·ã¹ãã ã®æãŸããç¶æ ãšæ§æã¯Gitã§å®çŸ©ãããããŒãžã§ã³ç®¡çãããŸãã
ã·ã¹ãã ã®æãŸããç¶æ ãGitã«ä¿åããããŒãžã§ã³ç®¡çããããšã§ãã·ã¹ãã ãã¢ããªã±ãŒã·ã§ã³ãžã®å€æŽãç°¡åã«ããŒã«ããã¯ãããããŒã«ããã¯ãããã§ããŸãããŸããGitã®ã»ãã¥ãªãã£ã¡ã«ããºã ã䜿çšããŠãã³ãŒãã®æææš©ã管çãããã®ä¿¡é Œæ§ãæ€èšŒããããšãã§ããŸãã
- ãã«ãªã¯ãšã¹ãã䜿çšããŠæ§æã®å€æŽãèªåçã«é©çšã§ããŸã
Gitã®ãã«ãªã¯ãšã¹ãã䜿çšãããšããªããžããªå ã®èšå®ãžã®å€æŽã®é©ç𿹿³ãç°¡åã«å¶åŸ¡ã§ããŸããäŸãã°ãä»ã®ããŒã ã¡ã³ããŒã«ããã¬ãã¥ãŒãCIãã¹ãã®å®è¡ãªã©ãå¯èœã§ãã
管çè æš©éããããããšäžããå¿ èŠããããŸãããèšå®ã®å€æŽãã³ãããããã«ã¯ãèšå®ãä¿åãããŠããGitãªããžããªã«å¯Ÿããé©åãªæš©éãããã°ååã§ãã
- å¶åŸ¡äžèœãªæ§æããªããã®åé¡ãä¿®æ£
ã·ã¹ãã ã®æãŸããç¶æ ãGitãªããžããªã«ä¿åãããããããšã¯ã·ã¹ãã ã®çŸåšã®ç¶æ ãæãŸããç¶æ ãšäžèŽããŠãããã©ãããç£èŠãããœãããŠã§ã¢ãèŠã€ããã ãã§ããããäžèŽããŠããªãå Žåããã®ãœãããŠã§ã¢ã¯èšå®ã«å¿ããŠãççŸãèªåçã«ä¿®æ£ããããæ§æã®ããã«ã€ããŠéç¥ããã¯ãã§ãã
OpenShift åã GitOps ã¢ãã«
ã¯ã©ã¹ã¿å ãªãœãŒã¹èª¿æŽããŒã«
ãã®ã¢ãã«ã§ã¯ãã¯ã©ã¹ã¿ã«ã¯Gitãªããžããªå ã®KubernetesãªãœãŒã¹ïŒYAMLãã¡ã€ã«ïŒãšå®éã®ã¯ã©ã¹ã¿ãªãœãŒã¹ãæ¯èŒããã³ã³ãããŒã©ãååšããŸããäžäžèŽãæ€åºããããšãã³ã³ãããŒã©ã¯éç¥ãéä¿¡ããå Žåã«ãã£ãŠã¯äžäžèŽã解決ããããã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãããã®GitOpsã¢ãã«ã¯ãAnthos Config ManagementãšWeaveworks Fluxã§äœ¿çšãããŠããŸãã

å€éšãªãœãŒã¹ãªã³ã³ãµã€ã©ïŒããã·ã¥ïŒ
ãã®ã¢ãã«ã¯ãGitãªããžããªãšKubernetesã¯ã©ã¹ã¿ãŒã®ãã¢ã§ãªãœãŒã¹åæãæ åœãã8ã€ä»¥äžã®ã³ã³ãããŒã©ãŒãæã€ãåè¿°ã®ã¢ãã«ã®ããªãšãŒã·ã§ã³ãšèããããšãã§ããŸããããã§ã®éãã¯ãåãããŒãžãã¯ã©ã¹ã¿ãŒãå¿ ãããåå¥ã®ã³ã³ãããŒã©ãŒãæã€å¿ èŠããªãããšã§ããGitãšKubernetesã¯ã©ã¹ã¿ãŒã®ãã¢ã¯ãå€ãã®å ŽåCRDïŒã«ã¹ã¿ã ãªãœãŒã¹å®çŸ©ïŒãšããŠå®çŸ©ãããã³ã³ãããŒã©ãŒãã©ã®ããã«åæãå®è¡ããããèšè¿°ã§ããŸãããã®ã¢ãã«ã§ã¯ãã³ã³ãããŒã©ãŒã¯CRDã§æå®ãããGitãªããžããªãšãåããCRDã§æå®ãããKubernetesã¯ã©ã¹ã¿ãŒãªãœãŒã¹ãæ¯èŒããæ¯èŒçµæã«åºã¥ããŠé©åãªã¢ã¯ã·ã§ã³ãå®è¡ããŸããç¹ã«ããã®ãããªGitOpsã¢ãã«ã¯ArgoCDã§äœ¿çšãããŠããŸãã

OpenShift ãã©ãããã©ãŒã äžã® GitOps
ãã«ãã¯ã©ã¹ã¿Kubernetesã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç®¡ç
Kubernetes ã®å°å ¥ãšãã«ãã¯ã©ãŠãæŠç¥ããã³ãšããž ã³ã³ãã¥ãŒãã£ã³ã°ã®äººæ°ã®é«ãŸãã«ããã顧客ãããã® OpenShift ã¯ã©ã¹ã¿ãŒã®å¹³åæ°ãå¢å ããŠããŸãã
ããšãã°ããšããž ã³ã³ãã¥ãŒãã£ã³ã°ã§ã¯ãåäžã®é¡§å®¢ãæ°çŸãŸãã¯æ°åã®ã¯ã©ã¹ã¿ãŒãå±éããããšãããããããªã㯠ã¯ã©ãŠããšãªã³ãã¬ãã¹ ã¯ã©ãŠãå šäœã§è€æ°ã®ç¬ç«ããããŸãã¯èª¿æŽããã OpenShift ã¯ã©ã¹ã¿ãŒã管çããå¿ èŠãçããŸãã
åæã«ã解決ããªããã°ãªããªãåé¡ãæ°å€ããããŸãããç¹ã«æ¬¡ã®ãããªåé¡ã§ãã
- ã¯ã©ã¹ã¿ãŒãåäžã®ç¶æ ïŒæ§æãç£èŠãã¹ãã¬ãŒãžãªã©ïŒã«ããããšã確èªããŸã
- æ¢ç¥ã®ç¶æ ããã¯ã©ã¹ã¿ãŒãåäœæ (ãŸãã¯åŸ©å ) ããŸãã
- æ¢ç¥ã®ç¶æ ã«åºã¥ããŠæ°ããã¯ã©ã¹ã¿ãŒãäœæããŸãã
- è€æ°ã® OpenShift ã¯ã©ã¹ã¿ãŒã«å€æŽãããŒã«ã¢ãŠãããŸãã
- è€æ°ã® OpenShift ã¯ã©ã¹ã¿ãŒã«ããã£ãŠå€æŽãããŒã«ããã¯ããŸãã
- ãã³ãã¬ãŒãåãããæ§æãããŸããŸãªç°å¢ã«ãªã³ã¯ããŸãã
ã¢ããªã±ãŒã·ã§ã³æ§æ
ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã€ããµã€ã¯ã«ãéããŠãæ¬çªç°å¢ã®ã¯ã©ã¹ã¿ã«å°éããåã«ãè€æ°ã®ã¯ã©ã¹ã¿ïŒéçºãã¹ããŒãžã³ã°ãªã©ïŒãééããããšããããããŸããããã«ãå¯çšæ§ãšã¹ã±ãŒã©ããªãã£ã®èŠä»¶ã«ãããã客æ§ã¯è€æ°ã®ãªã³ãã¬ãã¹ã¯ã©ã¹ã¿ããããªãã¯ã¯ã©ãŠããªãŒãžã§ã³ã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããããšããããããŸãã
ãã®å Žåãæ¬¡ã®ã¿ã¹ã¯ã解決ããå¿ èŠããããŸãã
- ã¯ã©ã¹ã¿ãŒ (éçºãã¹ããŒãžãªã©) éã§ã®ã¢ããªã±ãŒã·ã§ã³ (ãã€ããªãæ§æãªã©) ã®ç§»åãæäŸããŸãã
- è€æ°ã® OpenShift ã¯ã©ã¹ã¿ãŒã«ããã£ãŠã¢ããªã±ãŒã·ã§ã³ (ãã€ããªãæ§æãªã©) ãžã®å€æŽãããŒã«ã¢ãŠãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®å€æŽã以åã®æ¢ç¥ã®ç¶æ ã«ããŒã«ããã¯ããŸãã
OpenShift GitOps ã®ãŠãŒã¹ã±ãŒã¹
1. Gitãªããžããªããã®å€æŽã®é©çš
ã¯ã©ã¹ã¿ãŒç®¡çè ã¯ãOpenShift ã¯ã©ã¹ã¿ãŒæ§æã Git ãªããžããªã«ä¿åãããããèªåçã«é©çšããŠãç°¡åã«æ°ããã¯ã©ã¹ã¿ãŒãäœæããGit ãªããžããªã«ä¿åãããŠããæ¢ç¥ã®ç¶æ ãšåäžã®ç¶æ ã«ããããšãã§ããŸãã
2. Secret Managerãšã®åæ
管çè ã¯ãOpenShift ã·ãŒã¯ã¬ããã Vault ãªã©ã®é©åãªãœãããŠã§ã¢ãšåæãããã®ç®çã®ããã«ç¹å¥ã«èšèšãããããŒã«ã䜿çšããŠç®¡çã§ãããšããã¡ãªãããåŸãããŸãã
3. æ§æããªããå¶åŸ¡
OpenShift GitOps èªäœãå®éã®æ§æãšãªããžããªã§æå®ãããæ§æã®äžäžèŽãæ€åºããŠèŠåããããªããã«è¿ éã«å¯Ÿå¿ã§ããããã«ããã°ã管çè ã¯å€§è³æã§ãã
4. æ§æããªããéç¥
ãããã¯ã管çè ãæ§æããªããã®äºäŸãè¿ éã«ææ¡ããèªäž»çã«é©åãªå¯Ÿçãè¿ éã«è¬ãããå Žåã«åœ¹ç«ã¡ãŸãã
5. ããªããäžã®æ§æã®æååæ
管çè ã¯ãæ§æã®ããªãããçºçããå Žåã« OpenShift ã¯ã©ã¹ã¿ãŒã Git ãªããžããªãšåæããŠãã¯ã©ã¹ã¿ãŒã以åã®æ¢ç¥ã®ç¶æ ã«çŽ æ©ãæ»ãããšãã§ããŸãã
6.ããªããäžã®æ§æã®èªååæ
管çè ã¯ãããªãããæ€åºããããšãã« OpenShift ã¯ã©ã¹ã¿ãŒããªããžããªãšèªåçã«åæããããã«æ§æããããšãã§ããŸããããã«ãããã¯ã©ã¹ã¿ãŒæ§æã¯åžžã« Git ã®æ§æãšäžèŽããããã«ãªããŸãã
7. è€æ°ã®ã¯ã©ã¹ã¿ãŒ â XNUMXã€ã®ãªããžããª
管çè ã¯ãè€æ°ã®ç°ãªã OpenShift ã¯ã©ã¹ã¿ãŒã®æ§æãåäžã® Git ãªããžããªã«ä¿åããå¿ èŠã«å¿ããŠéžæçã«é©çšã§ããŸãã
8. ã¯ã©ã¹ã¿æ§æã®éå±€ïŒç¶æ¿ïŒ
管çè ã¯ãªããžããªå ã§ã¯ã©ã¹ã¿ãŒèšå®ã®éå±€ïŒã¹ããŒãžãæ¬çªãã¢ããªããŒããã©ãªãªãªã©ãç¶æ¿ãå«ãïŒãå®çŸ©ã§ããŸããã€ãŸããèšå®ãã©ã®ããã«é©çšãããïŒ1ã€ãŸãã¯è€æ°ã®ã¯ã©ã¹ã¿ãŒïŒã決å®ã§ããŸãã
ããšãã°ã管çè ã Git ãªããžããªã«éå±€ãå®çŸ©ããå Žåããæ¬çªã¯ã©ã¹ã¿ãŒ (prod) â ã·ã¹ãã X ã®ã¯ã©ã¹ã¿ãŒ â ã·ã¹ãã X ã®æ¬çªã¯ã©ã¹ã¿ãŒããã·ã¹ãã X ã®æ¬çªã¯ã©ã¹ã¿ãŒã«å¯ŸããŠæ¬¡ã®æ§æãçµåãããŸãã
- ãã¹ãŠã®æ¬çªç°å¢ã¯ã©ã¹ã¿ãŒã«å ±éã®æ§æã
- X ã·ã¹ãã ã¯ã©ã¹ã¿ãŒã®æ§æã
- X ã·ã¹ãã ã®éçšã¯ã©ã¹ã¿ãŒã®æ§æã
9. ãã³ãã¬ãŒããšãªãŒããŒã©ã€ãæ§æ
管çè ã¯ãç¶æ¿ãããæ§æãšãã®å€ã®ã»ããããªãŒããŒã©ã€ãããŠãããšãã°ãããããé©çšãããç¹å®ã®ã¯ã©ã¹ã¿ãŒã®æ§æã埮調æŽã§ããŸãã
10. æ§æãã¢ããªã±ãŒã·ã§ã³æ§æã®éžæçãªå å«ãšé€å€
管çè ã¯ãç¹å®ã®ç¹æ§ãæã€ã¯ã©ã¹ã¿ãŒã«ç¹å®ã®æ§æãé©çšãããé©çšããªããã®æ¡ä»¶ãèšå®ã§ããŸãã
11. ãã³ãã¬ãŒãã®ãµããŒã
éçºè ã¯ãã¢ããªã±ãŒã·ã§ã³ ãªãœãŒã¹ã®å®çŸ©æ¹æ³ (Helm Chartããã¬ãŒã³ Kubernetes yaml ãªã©) ãéžæããŠãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ããšã«æãé©åãªåœ¢åŒã䜿çšã§ãããšããã¡ãªãããåŸãããŸãã
OpenShift äžã® GitOps ããŒã«
ã¢ã«ãŽCD
ArgoCDã¯å€éšãªãœãŒã¹èª¿æŽã¢ãã«ãå®è£ ããã¯ã©ã¹ã¿ãŒãšGitãªããžããªéã®1察å€é¢ä¿ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããããã®éäžåUIãæäŸããŸãããã®ããã°ã©ã ã®æ¬ ç¹ã¯ãArgoCDãåäœããŠããªããšãã¯ã¢ããªã±ãŒã·ã§ã³ã管çã§ããªãããšã§ãã
Flux
Flux 㯠On-Cluster Resource Reconcile ã¢ãã«ãå®è£ ããŠãããããå®çŸ©ãªããžããªã®éäžç®¡çãå®çŸãããŠããŸãããããã匱ç¹ã§ããäžæ¹ã§ãéäžç®¡çãããŠããªãããããã1 ã€ã®ã¯ã©ã¹ã¿ãŒã«é害ãçºçããŠãã¢ããªã±ãŒã·ã§ã³ç®¡çèœåãç¶æãããŸãã
OpenShiftã«ArgoCDãã€ã³ã¹ããŒã«ãã
ArgoCD ã¯åªããã³ãã³ãã©ã€ã³ ã€ã³ã¿ãŒãã§ã€ã¹ãš Web ã³ã³ãœãŒã«ãæäŸãããããããã§ã¯ 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}')ArgoCD Server ã OpenShift Route ããåç §ã§ããããã«ä¿®æ£ãã
# 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=RedirectArgoCD CliããŒã«ã®ãããã€
# 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/argocdArgoCDãµãŒã管çè ãã¹ã¯ãŒãã®å€æŽ
# 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 Web ã³ã³ãœãŒã«ãŸã㯠ArgoCD Cli ã³ãã³ãã©ã€ã³ ããŒã«ã䜿çšã㊠ArgoCD Server ãæäœã§ããããã«ãªããŸãã
GitOps â æ±ºããŠé ãããããšã¯ãªã
ãåè»ãé§ ãåºçºããããšã¯ãäœããå®è¡ããæ©äŒãéããŠããŸã£ãæã®èšãæ¹ã§ããOpenShiftã®å Žåããã®ã¯ãŒã«ãªæ°ãããã©ãããã©ãŒã ãããã«äœ¿ãå§ããããšããæãããã«ãŒãããããã€ã¡ã³ãããã®ä»ã®OpenShiftãªããžã§ã¯ãã®ç®¡çãšä¿å®ã«ãããŠãŸãã«ãã®ãããªç¶æ³ãçã¿åºãããšããããããŸããããããæ©äŒã¯åžžã«å®å šã«éããŠããŸãã®ã§ããããïŒ
ã·ãªãŒãºã®ç¶ã 仿¥ã¯ãæäœæ¥ã§äœæããã¢ããªã±ãŒã·ã§ã³ãšãã®ãªãœãŒã¹ããGitOps ã§ãã¹ãŠç®¡çãããããã»ã¹ã«å€æããæ¹æ³ãã玹ä»ããŸãããã®ããã«ã¯ããŸã httpd ã¢ããªã±ãŒã·ã§ã³ãæåã§ãããã€ããŸããäžã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãåå空éããããã€ã¡ã³ãããµãŒãã¹ãäœæãããã®ãµãŒãã¹ãå ¬éããŠã«ãŒããäœæããæ¹æ³ã瀺ããŠããŸãã
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ããŠãæäœæ¥ã§æ§ç¯ããã¢ããªã±ãŒã·ã§ã³ã宿ããŸãããæ¬¡ã«ãå¯çšæ§ãæãªãããšãªããGitOps 管çã«ç§»è¡ããå¿ èŠããããŸããç°¡åã«èšããšã次ã®ãããªåŠçã§ãã
- ã³ãŒãçšã® Git ãªããžããªãäœæããŸãã
- çŸåšã®ãªããžã§ã¯ãããšã¯ã¹ããŒãããGit ãªããžããªã«ã¢ããããŒãããŸãã
- GitOps ããŒã«ã®éžæãšãããã€ã
- ãã®ããŒã«ãããã«ãªããžããªã远å ããŸãããã
- GitOps ããŒã«ãããã§ã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŸãã
- GitOps ããŒã«ãããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãå®è¡ãå®è¡ããŸãã
- GitOps ããŒã«ã䜿çšããŠãªããžã§ã¯ããåæããŸãã
- ãªããžã§ã¯ãã®ãã«ãŒãã³ã°ãšèªååæãæå¹ã«ããŸãã
åã«è¿°ã¹ãããã« GitOps ã§ã¯ãKubernetes ã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®ãªããžã§ã¯ãã«é¢ããæ å ±æºã¯ Git ãªããžããªã®ã¿ãšãªããŸãã以äžã§ã¯ãçµç¹å ã§æ¢ã« Git ãªããžããªã䜿çšãããŠããããšãåæãšããŠããŸãããªããžããªã¯ãããªãã¯ã§ããã©ã€ããŒãã§ãæ§ããŸããããKubernetes ã¯ã©ã¹ã¿ãŒããã¢ã¯ã»ã¹ã§ããå¿ èŠããããŸããã¢ããªã±ãŒã·ã§ã³ã³ãŒããšåããªããžããªã§ãããããã€ã¡ã³ãå°çšã«äœæãããå¥ã®ãªããžããªã§ãæ§ããŸããããªããžããªã«ã¯ã·ãŒã¯ã¬ãããã«ãŒãããã®ä»ã®ã»ãã¥ãªãã£äžéèŠãªæ å ±ãä¿åãããããã峿 Œãªæš©éèšå®ãæšå¥šããŸãã
ãã®äŸã§ã¯ãGitHub ã«æ°ãããããªãã¯ãªããžããªãäœæããŸãããªããžããªã®ååã¯èªç±ã«èšå®ã§ããŸãããããã§ã¯ãblogpostããšããååã䜿çšããŸãã
ãªããžã§ã¯ãYAMLãã¡ã€ã«ãããŒã«ã«ãŸãã¯Gitã«ä¿åããŠããªãå Žåã¯ãocãŸãã¯kubectlãã€ããªã䜿çšããå¿ èŠããããŸããäžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãåå空éããããã€ã¡ã³ãããµãŒãã¹ãã«ãŒãã®YAMLããªã¯ãšã¹ãããŠããŸãããã®åã«ãäœæãããªããžããªãã¯ããŒã³ããããã«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ããã§ãdeployment.yaml ãã¡ã€ã«ãç·šéããŠãArgo CD ãåæã§ããªããã£ãŒã«ããåé€ããŸãã
sed -i '/sgeneration: .*/d' deployment.yamlã«ãŒãã倿Žããå¿ èŠããããŸãããŸããè€æ°è¡å€æ°ãèšå®ãã ingress: null ããã®å€æ°ã®å 容ã«çœ®ãæããŸãã
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/$ROUTE/g" route.yamlãã¡ã€ã«ã®æŽçã¯å®äºããŸãããããšã¯Gitãªããžããªã«ä¿åããã ãã§ããä¿ååŸã¯ããã®ãªããžããªãå¯äžã®æ å ±æºãšãªãããªããžã§ã¯ããžã®æå倿Žã¯å³çŠãšãªããŸãã
git commit -am âinitial commit of objectsâ
git push origin masterããã«ãArgoCDããã§ã«å°å ¥ãããŠãããšããäºå®ããé²ããŠãããŸãïŒå°å ¥æ¹æ³ã«ã€ããŠã¯ãåã® ïŒãããã§ãå ã»ã©äœæãããªããžããªïŒäŸã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå«ãïŒãArgo CDã«è¿œå ããŸããããå ã»ã©äœæãããªããžããªãæå®ããããšãå¿ããªãã§ãã ããã
argocd repo add https://github.com/cooktheryan/blogpost次ã«ãã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãGitOpsããŒã«ã䜿çšãããªããžããªãšãã¹ããªããžã§ã¯ãã®ç®¡çã«å¿ èŠãªOpenShiftãå¿ èŠãªãªããžããªãã©ã³ãããªãœãŒã¹ã®èªååæãå®è¡ãããã©ãããçè§£ã§ããããã«å€ãèšå®ããŸãã
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ã§å®çŸ©ããããšãããŒã«ã¯æ¢ã«ãããã€ãããŠãããªããžã§ã¯ãããªããžããªå
ã®å®çŸ©ãšç
§åãå§ããŸãããã®äŸã§ã¯ãèªååæãšã¯ãªãŒã³ã¢ãããç¡å¹ã«ãªã£ãŠãããããèŠçŽ ã¯ãŸã 倿ŽãããŠããŸãããArgo CDã€ã³ã¿ãŒãã§ãŒã¹ã§ã¯ãArgoCDãæäŸããã©ãã«ããªããããã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ã¯ãOut of SyncïŒåæããŠããªãïŒãã«ãªããŸãã
ãã®ãããåŸã§åæãå®è¡ããŠãããªããžã§ã¯ãã¯åãããã€ãããŸããã
ããã§ã¯ããã¡ã€ã«ã«ãšã©ãŒããªãããšã確èªããããã«ãã¹ãå®è¡ãããŠã¿ãŸãããã
argocd app sync simple-app --dry-runãšã©ãŒããªããã°ãåæã«é²ãããšãã§ããŸãã
argocd app sync simple-appã¢ããªã±ãŒã·ã§ã³ã§ argocd get ã³ãã³ããå®è¡ãããšãã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ããHealthyããŸãã¯ãSyncedãã«å€ããã¯ãã§ããããã¯ãGitãªããžããªå ã®ãã¹ãŠã®ãªãœãŒã¹ãããã§ã«ãããã€ãããŠãããªãœãŒã¹ãšäžèŽããŠããããšãæå³ããŸãã
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 管çã«ç§»è¡ããããšã«æåããŸããã
åºæïŒ habr.com
