2) Installing Argo Rollouts - jangjaelee/tutorials-argo-rollouts GitHub Wiki
2022.04. ์ด์ฅ์ฌ ๐ง [email protected] ๐ https://github.com/jangjaelee ๐ http://www.awx.kr
Manifest์ Helm์ ์ฌ์ฉํ ๋ ๊ฐ์ง ์ค์น ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ, ์ถ๊ฐ๋ก Argo CD Operator๋ฅผ ์ฌ์ฉํ ์ค์น ๋ฐฉ๋ฒ๋ ์์๋ณด๊ฒ ์ต๋๋ค.
- using Manifest
- using Helm
- using Helm with Argo CD Operator
$ kubectl create namespace argo-rollouts
namespace/argo-rollouts created
$ kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
customresourcedefinition.apiextensions.k8s.io/analysisruns.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/analysistemplates.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/clusteranalysistemplates.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/experiments.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/rollouts.argoproj.io created
serviceaccount/argo-rollouts created
clusterrole.rbac.authorization.k8s.io/argo-rollouts created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-admin created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-edit created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-aggregate-to-view created
clusterrolebinding.rbac.authorization.k8s.io/argo-rollouts created
secret/argo-rollouts-notification-secret created
service/argo-rollouts-metrics created
deployment.apps/argo-rollouts created
Web UI Dashboard๋ฅผ ์ํ argo-rollouts-dashboard Deployment
resource๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฏธํฌํจ์ผ๋ก, ์ค์น๊ฐ ํ์ํ๋ฉด dashboard-install.yaml
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์น ์งํ ํฉ๋๋ค.
$ kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/dashboard-install.yaml
serviceaccount/argo-rollouts-dashboard created
clusterrole.rbac.authorization.k8s.io/argo-rollouts-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/argo-rollouts-dashboard created
service/argo-rollouts-dashboard created
deployment.apps/argo-rollouts-dashboard created
$ kubectl get pod,deployment,svc -n argo-rollouts | egrep "NAME|argo-rollouts-dashboard"
NAME READY STATUS RESTARTS AGE
pod/argo-rollouts-dashboard-ff9668f57-hbg9m 1/1 Running 0 5m46s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argo-rollouts-dashboard 1/1 1 1 5m46s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argo-rollouts-dashboard ClusterIP 10.111.151.159 <none> 3100/TCP 5m46s
Web UI Dashboard๋ฅผ ์ํ argo-rollouts-dashboard Deployment
resource๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐํฌ๋์ง ์์ผ๋ฏ๋ก UI๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ์ ๋ถ์ --set dashboard.enabled=true
์ต์
์ ๋ฐ๋์ง ์ง์ ํ์๊ธฐ ๋ฐ๋๋๋ค.
$ helm repo add argo https://argoproj.github.io/argo-helm
$ helm repo update
# argo rollouts์ helm chart ๊ธฐ๋ณธ values ํ์ผ ์ถ์ถํ๊ณ ์ถ์ถํ ํ์ผ์ ๋ณธ์ธ์ ํ๊ฒฝ์ ๋ง๊ฒ ์์
$ helm show values argo/argo-rollouts > argo-rollouts-values.yaml
$ helm install argo-rollouts argo/argo-rollouts -f argo-rollouts-values.yaml -n argo-rollouts --create-namespace --set dashboard.enabled=true
coalesce.go:220: warning: cannot overwrite table with non table for argo-rollouts.dashboard.ingress.annotations (map[])
NAME: argo-rollouts
LAST DEPLOYED: Mon Apr 11 16:50:22 2022
NAMESPACE: argo-rollouts
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ kubectl get all -n argo-rollouts
NAME READY STATUS RESTARTS AGE
pod/argo-rollouts-555667ffc9-929c9 1/1 Running 0 4m40s
pod/argo-rollouts-555667ffc9-f7dq4 1/1 Running 0 4m40s
pod/argo-rollouts-dashboard-5878c84fb4-26g69 1/1 Running 0 4m40s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argo-rollouts-dashboard ClusterIP 10.104.113.233 <none> 3100/TCP 4m40s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argo-rollouts 2/2 2 2 4m40s
deployment.apps/argo-rollouts-dashboard 1/1 1 1 4m40s
NAME DESIRED CURRENT READY AGE
replicaset.apps/argo-rollouts-555667ffc9 2 2 2 4m40s
replicaset.apps/argo-rollouts-dashboard-5878c84fb4 1 1 1 4m40s
Argo CD๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์๋ค๋ฉด Operator๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค.
spec.source.helm.parameters
์ spec.source.helm.values
๋ ํ๊ฒฝ์ ๋ง๊ฒ ์์ ํ์ฌ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
$ cat <<EOF | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argo-rollouts
namespace: argocd
spec:
destination:
name: in-cluster
namespace: argo-rollouts
project: default
source:
chart: argo-rollouts
helm:
parameters:
- name: dashboard.enabled
value: "true"
- name: dashboard.ingress.enabled
value: "true"
- name: dashboard.ingress.ingressClassName
value: nginx
values: |-
dashboard:
ingress:
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- argorollouts.awx.kr
tls:
- secretName: argorollouts-awx-kr-cert
hosts:
- argorollouts.awx.kr
repoURL: https://argoproj.github.io/argo-helm
targetRevision: 2.14.0
syncPolicy:
syncOptions:
- CreateNamespace=true
EOF
application.argoproj.io/argo-rollouts created
$ kubectl get applications/argo-rollouts -n argocd
NAME SYNC STATUS HEALTH STATUS REVISION
argo-rollouts Synced Healthy 2.14.0
Argo CD์ UI์์ ๋ฐฐํฌ๋ ๋ฆฌ์๋ค์ ํ์ธํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
kubectl plugin์ ์ ํ ์ฌํญ์ผ๋ก ์ค์น๋ฅผ ํด๋์๋ฉด Argo Rollouts ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ฉฐ, ์๊ฐํ๋ฅผ ์ ๊ณตํ๊ณ ์์ด ์ฌ์ฉ ๋ฐฐํฌ ์ ๋ต์ ๋ฐ๋ฅธ ์ฌ์ฉ์ด ํธ๋ฆฌํฉ๋๋ค.
Homebrew ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์น ์ ๊ณต
$ brew install argoproj/tap/kubectl-argo-rollouts
Linux, MacOS, Windows์ ๋ค์ํ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก 64bit ๋ง ์ ๊ณต๋จ
- kubectl-argo-rollouts-darwin-amd64
- kubectl-argo-rollouts-linux-amd64
- kubectl-argo-rollouts-linux-arm64
- kubectl-argo-rollouts-windows-amd64
$ curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
$ chmod 755 ./kubectl-argo-rollouts-linux-amd64
$ sudo mv -fv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
$ kubectl argo rollouts version
kubectl-argo-rollouts: v1.2.0+08cf10e
BuildDate: 2022-03-22T00:25:11Z
GitCommit: 08cf10e554fe99c24c8a37ad07fadd9318e4c8a1
GitTreeState: clean
GoVersion: go1.17.6
Compiler: gc
Platform: linux/amd64
Argo Rollouts dashboard์ ์ ์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ธ๋ถ์์ NodePort
๋๋ LoadBalancer
๋ฅผ ํตํด ์ ์์ ํ๊ธฐ์ํด์๋ argo-rollouts-dashboard Deployment
resource๋ฅผ ์ค์นํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ธ๋ถ์์ ์ ์์ด ํ์ํ์ง ์๋ค๋ฉด Argo Rollouts CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ด์ฅ๋ dashboard ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
$ kubectl argo rollouts dashboard
INFO[0000] Argo Rollouts Dashboard is now available at localhost 3100
$ netstat -nptl | egrep 'Proto|:3100'
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3100 :::* LISTEN 449168/kubectl-argo
์ด์ ๋ธ๋ผ์ฐ์ ์์ UI Dashboard์ ์ ์ํฉ๋๋ค. ์ ์ URL๋ก๋ localhost:3100 ๋๋ :3100 ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Argo Rollouts๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ด UI Dashboard์ ์๋ฌด๊ฒ๋ ํ์๋์ง ์๋ ๊ฒ์ด ์ ์์ ๋๋ค.
bash, zsh, fish ๋ฐ powershell์์ Shell ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณต ํ๊ณ ์์ด CLI ์ฌ์ฉ์ ๋งค์ฐ ์ ์ฉ ํฉ๋๋ค.
Bash:
$ source <(kubectl-argo-rollouts completion bash)
# To load completions for each session, execute once:
# Linux:
$ kubectl-argo-rollouts completion bash > /etc/bash_completion.d/kubectl-argo-rollouts
# macOS:
$ kubectl-argo-rollouts completion bash > /usr/local/etc/bash_completion.d/kubectl-argo-rollouts
Zsh:
# If shell completion is not already enabled in your environment,
# you will need to enable it. You can execute the following once:
$ echo "autoload -U compinit; compinit" >> ~/.zshrc
# To load completions for each session, execute once:
$ kubectl-argo-rollouts completion zsh > "${fpath[1]}/_kubectl-argo-rollouts"
# You will need to start a new shell for this setup to take effect.
fish:
$ kubectl-argo-rollouts completion fish | source
# To load completions for each session, execute once:
$ kubectl-argo-rollouts completion fish > ~/.config/fish/completions/kubectl-argo-rollouts.fish
PowerShell:
PS> kubectl-argo-rollouts completion powershell | Out-String | Invoke-Expression
# To load completions for every new session, run:
PS> kubectl-argo-rollouts completion powershell > kubectl-argo-rollouts.ps1
# and source this file from your PowerShell profile.
$ kubectl argo rollouts completion [bash|zsh|fish|powershell]
or
$ kubectl-argo-rollouts completion [bash|zsh|fish|powershell]
- Website
- GitHub
- Artifact Hub
- Slack
END