ArgoCDをKubernetes環境に導入しCD環境を設定する
以前の記事では、Centos7にKubernetes環境の構築をして、TLSの外部公開まで行いました。
今回はその環境にArgoCDを導入し、実際にマイクロサービスを動作させるまでの流れをまとめていきたいと思います。
ArgoCDとは
ArgoCDとは、KubernetesのためのGitOpsに則ったCDツールです。
Gitのリポジトリの変更を監視し変更を検知した後、Kubernetes環境のクラスターに自動デプロイを行うことができます。
GitOpsとは
GitOpsとは、インフラとアプリケーションの両方を含めたシステム全体のコードをGitで管理するといったような思想です。
例えばGitで管理されたインフラのコードを変更したら自動でデプロイされ、Gitと本番環境のサーバーのコードに差分がないような状態を実現できます。
CIとCDの分離
CDの方式については、CIPipelineがKubernetes環境にアクセスしてCDを行うのをPush型、CDを分離させKubernetes環境の変更を検知しCDを行うのをPull型と呼びます。
ただサービスの世代管理が困難であったりCIへの権限への問題などから、Pull型が推奨されています。
そのためCIとCDの分離を行い、Gitでソース管理された各マイクロサービスのアプリケーションリポジトリー側では自動テストとコンテナレジストーリーの更新のCI側で行い、Kubernetes環境を構成するマニフェストリポジトリー側ではマニフェストファイル変更検知後の自動デプロイをCD側で行う、といった役割になります。
ArgoCDリソースの作成
まずArgoCDの導入としてnamespaceを作成を行い、そのnamespaceにリソースの作成を行います。
# kubectl create namespace argocd
# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
外部公開の設定
以前の記事で外部公開のTLSの設定をcert-managerとNginx Ingress Controllerを使って設定したので、それを活用してargocd-serverを外部公開するためのIngressのマニフェストファイルを作成し、リソースの作成を行います。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
cert-manager.io/cluster-issuer: "letsencrypt-issuer"
ingress.kubernetes.io/ssl-redirect: "false"
spec:
tls:
- hosts:
- example-sub.test.com
secretName: test-com-tls
rules:
- host: example-sub.test.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
# kubectl apply -f ingress.yml -n argocd
これでexample-sub.test.comにアクセスしたら、以下のようなArgoCDにログインページが表示されます。
ArgoCDのログインページにログイン
初期ログインのアカウントは、作成したArgoCDリソースのSecretに記載されており、Usernameがadmin、Passwordが以下のコマンドで表示できるようになっています。
そして上記のPassword情報を使って、パスワードの再設定を行います。
# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
# argocd account update-password
*** Enter current password:
*** Enter new password:
*** Confirm new password:
上記のログイン情報をArgoCDのログインページで入力後、ログインできるようになります。
ArgoCD CLIの導入
コマンドでもArgoCDの設定が行えるよう、CLIのインストールと設定を行います。
# wget https://github.com/argoproj/argo-cd/releases/download/v2.0.5/argocd-linux-amd64
# wget https://github.com/argoproj/argo-cd/releases/download/v2.0.5/argocd-util-linux-amd64
# install argocd-linux-amd64 /usr/local/bin/argocd
# install argocd-util-linux-amd64 /usr/local/bin/argocd-util
CLIインストール後、確認のためにバージョンを表示します。
バージョン確認ではArgoCDのバージョンがは表示されますが、ArgoCD serverの項目では、「Argo CD server address unspecified」というエラーが出力されます。
そのエラーについては、CLIのログイン後解消されます。
# argocd version
argocd: v2.0.5+3a44d11
BuildDate: 2021-07-22T20:52:31Z
GitCommit: 4c9gnapekleodifnajem049c2d1354b88
GitTreeState: clean
GoVersion: go1.16
Compiler: gc
Platform: linux/amd64
FATA[0000] Argo CD server address unspecified
# argocd login サーバー名
Username: admin
Password: 設定したパスワード
# argocd version
argocd: v2.0.5+3a44d11
BuildDate: 2021-07-22T20:52:31Z
GitCommit: 4c9gnapekleodifnajem049c2d1354b88
GitTreeState: clean
GoVersion: go1.16
Compiler: gc
Platform: linux/amd64
argocd-server: v2.1.7+afaoamle
ArgoCDとGitリポジトリーの設定
ArgoCDで管理したいマニフェストファイルとGitリポジトリーの同期について行います。
まず現状のクラスター情報を確認し、管理するクラスターを選択し設定します。
# argocd cluster add
# argocd cluster add 上記で表示されたNAMEのクラスター名
設定が完了したら、ArgoCDの管理下に置きたいGitHubのマニフェストファイルのフォルダーの設定を行います。
# argocd app create アプリケーション名 --repo 設定したいGitHubの.gitのURL --path GitHubの管理下に置きたいフォルダのパス --dest-server https://kubernetes.default.svc --dest-namespace 設定したい名前空間
その後、同期設定を行います。
# argocd app sync アプリケーション名
同期されているか確認すると、Sync Statusの部分がSyncedとなっています。
# argocd app get アプリケーション名
(snip)
Sync Status: Synced to (c61b343)
(snip)
サンプルアプリケーションで試すと、以下のようになります。
# argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
# argocd app guestbook sync
実際に私がポートフォリオとして作成したアプリケーションのマニフェストリポジトリを設定すると以下のようになり、対象のコンテナバージョンをマニフェストファイルで変更しGitにpushすると、ArgoCDで自動デプロイが行われWebページの方も更新されます。
これで、GitHubのマニフェストファイルから作成したリソースがArgoCD管理下におかれ、Gitでマニフェストファイルの変更をpushすると自動的に該当するArgoCD管理下に置かれているクラスターのリソースも更新されるようになり、設定の方は完了です。
参考URL
Author And Source
この問題について(ArgoCDをKubernetes環境に導入しCD環境を設定する), 我々は、より多くの情報をここで見つけました https://qiita.com/bindingpry/items/8f10a701015599a00953著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .