OpenShift4(CodeReady Contaainess)에서 Argo CD 가져오기, 활용
15445 단어 ArgoCDopenshiftCodeReadyContainer
이 기사는 OpenShift4 환경(엄밀히 말하면 Mac를 가져오는 CodeReady Contaainess 환경)에서 GitOps 도구로 사용할 Argo CD를 가져왔습니다.
또 아고 CD에 배포된 샘플 애플리케이션을 개발해 선언문을 업데이트하고 그 내용이 오픈시프트에 반영됐는지 확인한다.
참고 자료/페이지
GTOps on OpenShift 시작
Argo CD Getting Started
작업 환경
다음 환경에서 시도하고 있습니다.
항목
컨텐트
기계.
MacBook Pro(16인치, Late 2019)(8코어, 64GB 스토리지)
OS
macOS Catalina (10.15.3)
CodeReady Containers
1.6.0+8ef676f (OpenShift version: 4.3.0 (embedded in binary))
oc 명령
4.4.0
Argo CD CLI
v1.5.1+8a3b36b
Argo CD(server)
v1.5.0+bdda410
OpenShift에 Argo CD 설치
OpenShift에 Argo CD를 설치합니다.
oc login 명령을 사용하여 로그인한 후 Argo CD용 namespace를 만듭니다.
❯ kubectl create namespace argocd
namespace/argocd created
제작된 "argocd"namespace에 Argo CD를 설치합니다.❯ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io unchanged
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io unchanged
serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller unchanged
clusterrole.rbac.authorization.k8s.io/argocd-server unchanged
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller unchanged
clusterrolebinding.rbac.authorization.k8s.io/argocd-server unchanged
configmap/argocd-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-secret created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server-metrics created
service/argocd-server created
deployment.apps/argocd-application-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
Argo CD의 다양한 Pod가 실행 중인지 확인합니다.❯ oc get pods -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-7c587fb9d-mnp87 1/1 Running 0 100s
argocd-dex-server-595c68bc44-5wmwq 1/1 Running 0 100s
argocd-redis-8c568b5db-7jdtl 1/1 Running 0 100s
argocd-repo-server-b94d7dcb6-5nptx 1/1 Running 0 100s
argocd-server-764bb4b-728qm 1/1 Running 0 100s
GTOps on OpenShift 시작에서 말한 바와 같이 웹 콘솔에 접근하는 루트를 만들지만 CodeReady Contaainess가 자신의 인증서를 사용하기 때문에 patch를 Deployment에 적용하고 루트를 만듭니다.(이 단계는 Introduction to GitOps with OpenShift에도 기재되어 있다)
❯ 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
deployment.extensions/argocd-server patched
❯ oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
route.route.openshift.io/argocd-server created
Argo CD 웹 사이트 콘솔에 로그인웹 콘솔에 로그인한 호스트 이름을 확인합니다.다음 HOST/PORT 항목은 호스트 이름입니다.
❯ oc get route -n argocd
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
argocd-server argocd-server-argocd.apps-crc.testing argocd-server http edge/Redirect None
브라우저를 통해 https://<위의 HOST/PORT>/에 액세스하면 Argo CD의 웹 콘솔 로그인 화면에 액세스할 수 있습니다.Argo CD의 매니저 사용자 이름과 초기 암호는 다음과 같습니다.
❯ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
그러나 Argo CD를 가져오고 삭제한 후 다시 가져오면 비밀번호에 Pod 이름을 입력하면 로그인 오류가 발생합니다.이 경우 다음 페이지를 참조하여 Secret으로 설정된 암호를 변경한 후 로그인할 수 있습니다.
Argo CD FAQ : I forgot the admin password, how do I reset it?
Argo CD CLI 설치
Homebrew에서 Argo CD CLI를 설치합니다.
> brew tap argoproj/tap
> brew install argoproj/tap/argocd
CLI를 통해 로그인CLI 액세스는 "argocd-server"서비스의 포트를 사용하여 전달됩니다.
Argo CD Getting Started에서는 ARgocd-server 서비스를 Load Balancer로 변경하는 절차도 소개했지만 포트 전송이 가장 쉽다.
다른 콘솔에서 kubectl port-forward를 실행합니다.
❯ kubectl port-forward svc/argocd-server -n argocd 8080:443
그런 다음 CLI를 통해 로그인합니다.❯ argocd login localhost:8080
사용자 이름과 암호가 필요하지만 웹 콘솔에 로그인한 사용자(admin)와 암호를 입력합니다.로그인에 성공하면 관리자 암호가 변경됩니다.
❯ argocd account update-password
샘플 응용 프로그램의 디자인우선, 나는 견본 응용을 개발하는 프로젝트를 하나 할 것이다.이곳의 프로젝트 이름은 "argocd-example-apps"입니다.
❯ oc new-project argocd-example-apps
Now using project "argocd-example-apps" on server "https://api.crc.testing:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app ruby~https://github.com/sclorg/ruby-ex.git
to build a new example application in Python. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
https://github.com/argoproj/argocd-example-apps에 Argo CD로 CD를 테스트할 수 있는 샘플이 있습니다.이 GiitHub의 창고를 자신의 계좌로 포크하세요.
Fork 이후 창고의 URL은 https://github.com/<GiitHub의 계정 이름>/argocd-example-apps입니다.
그런 다음 Argo CD의 웹 UI에서 애플리케이션을 개발합니다.
로그인 후 화면에서 +NEW APP 버튼을 클릭합니다.
아래와 같이 입력한 다음 다른 기본 상태에서 CREATE 버튼을 누릅니다.
Namespace에서 방금 제작한 OpenShift 프로젝트의 프로젝트 이름(argocd-example-appls)을 설정합니다.
이렇게 하면 웹 UI에 guestbook 응용 프로그램이 나타납니다.
그러나 상태는 OutOfSync이며 OpenShift를 실제로 적용하지는 않았습니다.
프로그램을 디버깅하기 위해 Giit의 상태 (= 선언 파일에 정의된 상태) 와 OpenShift의 상태를 동기화합니다.
따라서 Giit 창고에 저장된 선언 파일을 적용하고 실제 응용 프로그램을 디버깅합니다.
위 화면에서 SYNC 버튼을 클릭합니다.
그런 다음 다음 SYNCHRONIZE 버튼을 클릭합니다.
이후 잠시 기다리면 다음과 같은 상태가 된다.
Status는 "Synced"로 Giit와 동기화된 상태임을 알 수 있습니다.
설계된 Pod이 시작되었는지 확인합니다.
❯ oc get pods
NAME READY STATUS RESTARTS AGE
guestbook-ui-65b878495d-g9shv 0/1 CrashLoopBackOff 6 8m44s
❯ oc logs guestbook-ui-65b878495d-g9shv
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.128.0.58. Set the 'ServerName' directive globally to suppress this message
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
❯ oc get pod guestbook-ui-65b878495d-g9shv -o yaml | grep -i serviceAccountName
serviceAccountName: default
ocget pods를 시도하면 CrashLoopBack Off가 됩니다.oclogs로 로그를 확인하면 80개의 포트가 Listen이 되지 않을 것 같습니다.
OpenShift에서 실행되는 컨테이너는 OpenShift에서 무작위로 분배된 UID로 실행되지만 80개의 포트를 사용하려면 루트 권한이 필요합니다.
따라서 Pod의 서비스 Acount'default'에는anyuid SCC를 수여하여 컨테이너 이미지의 Docker file의 USER 지도로 설정된 사용자가 컨테이너를 실행할 수 있도록 해야 한다.
❯ oc adm policy add-scc-to-user anyuid -z default
securitycontextconstraints.security.openshift.io/anyuid added to: ["system:serviceaccount:argocd-example-apps:default"]
Pod를 한 번 삭제하고 자동으로 복원된 Pod가 런닝인지 확인합니다.❯ oc delete pod/guestbook-ui-65b878495d-g9shv
pod "guestbook-ui-65b878495d-g9shv" deleted
❯ oc get pods
NAME READY STATUS RESTARTS AGE
guestbook-ui-65b878495d-9l6vq 1/1 Running 0 2m19s
ocexpose에 프로그램을 공개합니다.❯ oc expose svc/guestbook-ui
route.route.openshift.io/guestbook-ui exposed
❯ oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
guestbook-ui guestbook-ui-argocd-example-apps.apps-crc.testing guestbook-ui 80 None
ocget route를 통해 가져온 호스트에 접근합니다.http://guestbook-ui-argocd-example-apps.apps-crc.testing/
선언 문건을 갱신해 보다
마지막으로 선언문을 업데이트해 GiitHub에 반영하고, Argo CD를 통해 Sync를 진행하여 OpenShift에 반영할 수 있음을 확인한다.
git clone 창고의 마스터 지점에서guestbook/guestbook-ui-deployment.yaml의 spec.replicas를 1에서 2로 변경합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: guestbook-ui
spec:
replicas: 2 # 1から2に変更
revisionHistoryLimit: 3
selector:
matchLabels:
app: guestbook-ui
template:
metadata:
labels:
app: guestbook-ui
spec:
containers:
- image: gcr.io/heptio-images/ks-guestbook-demo:0.2
name: guestbook-ui
ports:
- containerPort: 80
변경된 파일commiit,push를 GiitHub로 가져옵니다.Argo CD의 Sync에 들어가기 전에 guestbook 애플리케이션의 상태를 확인합니다.
❯ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
guestbook https://kubernetes.default.svc argocd-example-apps default OutOfSync Healthy <none> <none> https://github.com/imanissy/argocd-example-apps guestbook HEAD
STATUS가 OutOfSunc가 된 것은 ocexpose에 따라 route를 제작했기 때문이다.(원래는route에 대해서도 선언문서에 정의해야 하는데 여기서 생략)
argocd app sync에서 guesstbook 응용 프로그램을 GiitHub과 동기화합니다.
❯ argocd app sync guestbook
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2020-04-27T23:40:44+09:00 route.openshift.io Route argocd-example-apps guestbook-ui OutOfSync
2020-04-27T23:40:44+09:00 Service argocd-example-apps guestbook-ui Synced Healthy
2020-04-27T23:40:44+09:00 apps Deployment argocd-example-apps guestbook-ui Synced Healthy
Name: guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: argocd-example-apps
URL: http://localhost:8080/applications/guestbook
Repo: https://github.com/imanissy/argocd-example-apps
Target: HEAD
Path: guestbook
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: OutOfSync from HEAD (5efadca)
Health Status: Progressing
Operation: Sync
Sync Revision: 5efadca55276c68f0e01ac24522d37ab8700fe25
Phase: Succeeded
Start: 2020-04-27 22:02:10 +0900 JST
Finished: 2020-04-27 22:02:12 +0900 JST
Duration: 2s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
route.openshift.io Route argocd-example-apps guestbook-ui OutOfSync ignored (requires pruning)
Service argocd-example-apps guestbook-ui Synced Healthy service/guestbook-ui unchanged
apps Deployment argocd-example-apps guestbook-ui Synced Progressing deployment.apps/guestbook-ui configured
FATA[0003] 1 resources require pruning
Deployment에 대해 "deployment.apps/guesstbook-ui configured"라는 메시지가 나타났다고 deployment가 밝혔다.yaml의 변경이 반영된 것 같습니다.Pod의 상태도 확인해야 한다.
❯ oc get pods
NAME READY STATUS RESTARTS AGE
guestbook-ui-65b878495d-4xs5t 1/1 Running 0 80s
guestbook-ui-65b878495d-9l6vq 1/1 Running 0 27m
Deployment에서 설정한 복사본 수 = 2의 변경이 실제로 반영되었다.argocd app history에서 반영된 이력을 확인할 수 있습니다.
❯ argocd app history guestbook
ID DATE REVISION
0 2020-04-27 21:06:53 +0900 JST HEAD (11113c9)
1 2020-04-27 21:59:23 +0900 JST HEAD (11113c9)
2 2020-04-27 22:02:12 +0900 JST HEAD (5efadca)
이렇게 하면 아고 CD를 활용해 기트 창고 상태를 기반으로 한 응용의 반영(상태 동기화)을 실현할 수 있다.
Reference
이 문제에 관하여(OpenShift4(CodeReady Contaainess)에서 Argo CD 가져오기, 활용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hisato_imanishi/items/28849ad0e47c53df3774텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)