概要
- k8sテスト環境構築
Argo CD インストール
構築目次
環境
- Rancher: v2.6.3
- kubernetes(Client): v1.22.4
- kubernetes(Server): v1.22.4
- Argocd: v2.2.1
前提条件
- NGINX Ingress インストール済み
[NGINX Ingress インストール] (https://qiita.com/prodigy413/items/b26bac84bbb4555ac8f0) - MetalLB インストール済み
[MetalLB インストール] (https://qiita.com/prodigy413/items/3a24ff85819dc5eafe25)
インストール
- 作業場所: ClientPC
- Argocd install page
https://argo-cd.readthedocs.io/en/stable/getting_started/
Argocd コマンドのダウンロード
- Argocd release page
https://github.com/argoproj/argo-cd/releases
$ wget https://github.com/argoproj/argo-cd/releases/download/v2.2.1/argocd-linux-amd64
$ mv argocd-linux-amd64 argocd
$ chmod +x argocd
$ sudo mv argocd /usr/local/bin/
$ argocd version --client
argocd: v2.2.1+122ecef
BuildDate: 2021-12-17T01:31:40Z
GitCommit: 122ecefc3abfe8b691a08d9f3cecf9a170cc8c37
GitTreeState: clean
GoVersion: go1.16.11
Compiler: gc
Platform: linux/amd64
Argocd インストール
## Namespace 作成 ##
$ kubectl create namespace argocd
## Argocd インストール ##
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
## 確認 ##
$ kubectl get all -n argocd
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 1/1 Running 0 7m29s
pod/argocd-dex-server-76c978c87-v66jf 1/1 Running 0 7m29s
pod/argocd-redis-5b6967fdfc-7p59t 1/1 Running 0 7m29s
pod/argocd-repo-server-8555f94d4f-zwn6n 1/1 Running 0 7m29s
pod/argocd-server-bc59fd78c-kj2f5 1/1 Running 0 7m29s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-dex-server ClusterIP 10.43.215.83 <none> 5556/TCP,5557/TCP,5558/TCP 7m30s
service/argocd-metrics ClusterIP 10.43.98.185 <none> 8082/TCP 7m30s
service/argocd-redis ClusterIP 10.43.48.168 <none> 6379/TCP 7m30s
service/argocd-repo-server ClusterIP 10.43.142.118 <none> 8081/TCP,8084/TCP 7m30s
service/argocd-server ClusterIP 10.43.255.118 <none> 80/TCP,443/TCP 7m30s
service/argocd-server-metrics ClusterIP 10.43.13.156 <none> 8083/TCP 7m29s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argocd-dex-server 1/1 1 1 7m29s
deployment.apps/argocd-redis 1/1 1 1 7m29s
deployment.apps/argocd-repo-server 1/1 1 1 7m29s
deployment.apps/argocd-server 1/1 1 1 7m29s
NAME DESIRED CURRENT READY AGE
replicaset.apps/argocd-dex-server-76c978c87 1 1 1 7m29s
replicaset.apps/argocd-redis-5b6967fdfc 1 1 1 7m29s
replicaset.apps/argocd-repo-server-8555f94d4f 1 1 1 7m29s
replicaset.apps/argocd-server-bc59fd78c 1 1 1 7m29s
NAME READY AGE
statefulset.apps/argocd-application-controller 1/1 7m29s
設定
Ingress 設定
-
設定参照
https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#kubernetesingress-nginx -
マニフェスト作成
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: nginx
rules:
- host: argocd.test.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
- マニフェスト適用
$ kubectl apply -f ingress.yaml
- hosts 設定追加
Load BalancerのIPとIngressで設定したhostを紐づけ
$ cat /etc/hosts
........
192.168.245.111 argocd.test.local
........
ログイン設定
- 初期パスワード確認
$ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
xxxxxxxxxx
- ログイン
## サーバーは上記Ingressで設定したホスト名、パスワードは初期パスワードでログイン。
$ argocd login argocd.test.local --username admin --password xxxxxxx
## ログイン後、パスワードを自分用に変更。
$ argocd account update-password
*** Enter password of currently logged in user (admin):
*** Enter new password for user admin:
*** Confirm new password for user admin:
Password updated
Context 'argocd.test.local' updated
## パスワード変更後、初期パスワード用secretは削除
$ kubectl delete secret -n argocd argocd-initial-admin-secret
※ログアウトする場合は以下実行
$ argocd logout argocd.test.local
動作確認
レポジトリ追加
- レポジトリ追加方法はいくつがあるが、ここではSSH Private Key利用
※GithubのSSH設定は説明スキップ
## 追加 ##
$ argocd repo add git@github.com:prodigy413/argocd-test.git --ssh-private-key-path ~/.ssh/github_key
## 確認 ##
$ argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
git git@github.com:prodigy413/argocd-test.git false false false false Successful
Application 追加
- マニフェスト作成
- 対象Namespace:argocd-test
- レポジトリ:argocd-test
- パス:ルートディレクトリ
- auto sync:有効(3分間隔でレポジトリ自動チェック)
- prune:有効(Githubからリソースが消えるとKubernetes上のリソースも自動削除)
- selfheal:有効(GithubとKubernetesのリソース差分があった場合、自動復旧)
application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: test
namespace: argocd
spec:
destination:
name: ''
namespace: argocd-test
server: 'https://kubernetes.default.svc'
source:
path: ./
repoURL: 'git@github.com:prodigy413/argocd-test.git'
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
- マニフェスト適用
## 適用 ##
$ kubectl apply -f application.yaml
## 確認 ##
$ argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
test https://kubernetes.default.svc argocd-test default OutOfSync Missing <none> <none> git@github.com:prodigy413/argocd-test.git ./ HEAD
Kubernetes 設定
- Namespace 作成
$ kubectl create ns argocd-test
- テスト用Pod作成
以下マニフェストをargocd-test
レポジトリにアップロード
nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
env: test
spec:
containers:
- name: nginx
image: nginx:1.21.4
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
確認
## Podが自動作成されている。
$ kubectl get pod -n argocd-test
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s
## Podを削除しても自動で再作成される。
$ kubectl delete pod nginx -n argocd-test
$ kubectl get pod -n argocd-test
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5s