[kubernetes]ArgoCDを利用したサービスのデプロイ


事前準備

kindのインストール

choco install kind
kind -version
#>kind v0.11.1 go1.16.4 windows/amd64

argoCD-cliのインストール

$version = (Invoke-RestMethod https://api.github.com/repos/argoproj/argo-cd/releases/latest).tag_name
$url = "https://github.com/argoproj/argo-cd/releases/download/" + $version + "/argocd-windows-amd64.exe"
$output = "C:\argocd\argocd.exe"
Invoke-WebRequest -Uri $url -OutFile $output

その後、システム環境変数にargoCDを設定する。

argocd version
#>argocd: v2.0.3+8d2b13d
#>  BuildDate: 2021-05-27T17:42:53Z
#>  GitCommit: 8d2b13d733e1dff7d1ad2c110ed31be4804406e2
#>  GitTreeState: clean
#>  GoVersion: go1.16
#>  Compiler: gc
#>  Platform: windows/amd64

クラスター作成

kind-3-3-cluster.yaml
# a cluster with 3 control-plane nodes and 3 workers
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: control-plane
  - role: control-plane
  - role: worker
  - role: worker
  - role: worker
kind create cluster --config kind-3-3-cluster.yaml
kubectl create namespace argocd

argoCDセットアップ

argoCD展開

kubectl apply -n argocd -f argoCD.yaml
kubectl get svc argocd-server -n argocd

#>NAME            TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)                      AGE
#>argocd-server   LoadBalancer   10.96.91.38   <pending>     80:30619/TCP,443:32674/TCP   3h10m

helmchartの場合

PS C:\Users\aruki\Desktop\dev\kind> helm repo list
#NAME            URL
#gitlab          https://charts.gitlab.io
#local           http://***/api/v4/projects/8/packages/helm/stable
#bitnami         https://charts.bitnami.com/bitnami
#ingress-nginx   https://kubernetes.github.io/ingress-nginx

helm install my-argo-cd local/argo-cd

argoCD UI接続

# Kubectlポートフォワーディング
kubectl port-forward svc/argocd-server -n argocd 8080:443

# 初期パスワードのチェック
kubectl -n argocd get secret argocd-initial-admin-secret -o go-template="{{.data.password | base64decode }}"
#>********

argocd login localhost:8080
#> WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)?
#>Username: admin
#>Password:
#>'admin:login' logged in successfully
#>Context 'localhost:8080' updated

# パスワード変更
argocd account update-password

その後、ブラウザで下記に接続するとargoCDのUIが表示される。
https://localhost:8080/applications

サンプル:kubernetes-dashboardのデプロイ

事前準備

kubernetes-dashboardをargoCDでデプロイする(Helmchart経由)

  • SettingsRepositoriesで、リポジトリを追加する

kubernetes-dashboard.yaml
project: default
source:
  repoURL: 'https://kubernetes.github.io/dashboard/'
  targetRevision: 4.3.1
  helm:
    valueFiles:
      - values.yaml
    parameters:
      - name: serviceAccount.name
        value: admin-user
  chart: kubernetes-dashboard
destination:
  server: 'https://kubernetes.default.svc'
  namespace: kubernetes-dashboard
syncPolicy:
  syncOptions:
    - CreateNamespace=true

  • NEW APPで下記のように登録
    • helmchartの名前、バージョンを指定する
    • すると、VALUES FILESをクリックしたときに候補としてvalues.yamlを選択できるようになるので、選択する
    • values.yamlを選択するとデフォルトの設定が入力されるが、デフォルト設定から、一か所だけ変更を加える。
      • serviceaccount.nameをadmin-userにする。これにより、ServiceAccountが追加される

デプロイ

下記のように設定し、sync(同期)する

結果、すべて作成され、同期できたことを確認できる。

作成結果

デフォルト設定からは、一か所だけ変更を加えている。

kubernetes-dashboardの接続

ログインするためには、ServiceAccountとclusterrolebindingが必要
- clusterrolebindingを追加する
※ServiceAccountは、argocdからdashboardを作成した時に設定しているので、追加不要

clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
 kubectl apply -f clusterrole.yaml
  • トークン取得
# トークン取得
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
>#eyJ*************************************************************************

kubectl proxy

その後、ブラウザで下記に接続するとkubernetes-dashboardのUIが表示されるので、先ほど表示したトークンを入力する

結果、ログインに成功し、すべてのリソースが正常(緑表示)になっていることを確認する。