2) Installing Argo Rollouts - jangjaelee/tutorials-argo-rollouts GitHub Wiki


2022.04. ์ด์žฅ์žฌ ๐Ÿ“ง [email protected] ๐Ÿ“‚ https://github.com/jangjaelee ๐Ÿ“’ http://www.awx.kr


 

Prerequisites

 

Step 1. Argo Rollouts Installation

Manifest์™€ Helm์„ ์‚ฌ์šฉํ•œ ๋‘ ๊ฐ€์ง€ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€๋กœ Argo CD Operator๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์น˜ ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • using Manifest
  • using Helm
  • using Helm with Argo CD Operator

Step 1.1. using Manifest

$ 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

Step 1.2. using Helm

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

Step 1.3. using Helm with Argo CD Operator (option)

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์—์„œ ๋ฐฐํฌ๋œ ๋ฆฌ์†Œ๋“ค์„ ํ™•์ธํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

using_helm_with_argocd_operator.png

Step 2. Kubectl Plugin Installation (option)

kubectl plugin์€ ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ์„ค์น˜๋ฅผ ํ•ด๋‘์‹œ๋ฉด Argo Rollouts ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ, ์‹œ๊ฐํ™”๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด ์‚ฌ์šฉ ๋ฐฐํฌ ์ „๋žต์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Step 2.1. Brew

Homebrew ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ์ œ๊ณต

$ brew install argoproj/tap/kubectl-argo-rollouts

Step 2.2. Manual

Linux, MacOS, Windows์˜ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ 64bit ๋งŒ ์ œ๊ณต๋จ

$ 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

Step 2.3. Connecting UI Dashboard

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-dashboard_01.png

Argo Rollouts๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—†์–ด UI Dashboard์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

Step 2.4. Shell auto completion

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]

 

Official Website

 

END

โš ๏ธ **GitHub.com Fallback** โš ๏ธ