ArgoCD構築ガイド(ArgoCD編)
はじめに
こんにちは、インフラエンジニアの北野です。
今回のブログでは、ArgoCDの構築手順と基本的な設定方法と動作確認の結果をご紹介しようと思います。
ArgoCD構築ガイド(インフラ編)では、コンテナ環境を動かすために必須となるEKSとECRレポジトリの作成までを実施しました。 以下の手順の1~3までですね。
ManagementサーバやGitlabサーバを配置するVPC、ネットワーク設定、サーバの構築
EKSの構築
ECRにレポジトリを作成
ArgoCDの導入
ECRレポジトリにimageをpush
GitlabにマニフェストをCommit
ArgoCDに同期設定を作成
このページでは4~7の手順について共有します。
環境構成
インフラ編のおさらいですが、今回ArgoCDを構築する環境のシステム構成はこのようなものになります。
構成図
ArgoCDの導入
次はArgoCDを導入します。
namespaceを作成する。
kubectl create namespace argocd
ArgoCDをデプロイする。
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
serviceのtypeをLoadBalancerにして、NLBを作成する。
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
argocdのPodが全てReady状態であることを確認する。
kubectl get pod -n argocd
LoadBalancerのEXTERNAL-IPを確認する。
kubectl get svc -n argocd |grep LoadBalancer
初期パスワードを確認する。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
argocdコマンドをinstallする。
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/${VERSION}/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
sudo ln -s /usr/local/bin/argocd /usr/bin/argocd
argocdコマンドでログインする。ログイン先はLoadBalancerのEXTERNAL-IPを指定する。
argocd login "LoadBalancerのEXTERNAL-IP"
"Proceed insecurely (y/n)?"と聞かれるのでyを入力し、Enterを押下する。 その後、Usernameには"admin"を、passwodには、[kubectl -n argocd get secret~]コマンドで取得した値を入力し、Enterを押下する。
初期パスワードを更新する。
argocd account update-password
まず、初期パスワードを入力し、その後、新パスワードを二度入力する。
ブラウザからArgoCDに接続する。
https://"LoadBalancerのEXTERNAL-IP"
保護されていない警告が表示されるので、[詳細設定]をクリックする。(Chromeの場合)
[~にアクセスする。(安全ではありません)]をクリックする。
ログイン画面が表示されることを確認する。
ユーザに"admin"、Passwordに確認した初期パスワードを入力して[SIGN IN]をクリックする。
ログインできることを確認する。
ECRレポジトリにimageをpush
テスト用にnginxのimageをECRレポジトリにPushします。 また、ArgoCDの動作確認用に、imageを変更したVersion2を作成し、2種類のImageを作成します。
nginxのimageをpullする。
docker pull nginx
docker images
nginxのv1とv2のtagを付いた別名のimageを作成する。
docker tag nginx:latest nginx:v1
docker tag nginx:latest nginx:v2
docker images
v2のimageを更新する。
CONTAINERID=`docker run -d nginx:v2`
docker exec -it ${CONTAINERID} sed -ie 's/Welcome to nginx/Welcome to my nginx/g' /usr/share/nginx/html/index.html
docker commit ${CONTAINERID} nginx:v2
v1とv2をECRにpushする準備をする。
ACCOUNTID=`aws sts get-caller-identity |grep Account |sed 's/\"/ /g' |awk '{print$3}'`
docker tag nginx:v1 ${ACCOUNTID}.dkr.ecr.us-east-2.amazonaws.com/nginx:v1
docker tag nginx:v2 ${ACCOUNTID}.dkr.ecr.us-east-2.amazonaws.com/nginx:v2
ECRへの接続の認証をし、"Login Succeeded"と表示されることを確認する。
aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin ${ACCOUNTID}.dkr.ecr.us-east-2.amazonaws.com
ECRにpushする。
docker push ${ACCOUNTID}.dkr.ecr.us-east-2.amazonaws.com/nginx:v1
docker push ${ACCOUNTID}.dkr.ecr.us-east-2.amazonaws.com/nginx:v2
これでImageの準備はOKです。
GitlabにマニフェストをCommit
もう終盤です。Gitlabにテスト用のNginxのマニフェストをCommitする。
EC2 > インスタンスから構築した"my-ec2-gitlab"を選択し、パブリックIPv4アドレスをコピーする。
SSH接続ツール(画面はTeraterm)を起動し、"my-ec2-gitlab"のパブリックIPv4アドレスを入力し、[OK]をクリックする
セキュリティ警告が表示されるので、[続行]をクリックする。
ログイン名に"ubuntu"を入力し、[RSA/DSA~を使う]を選択後、秘密鍵にkey-pairを作成したときにダウンロードしたファイルを指定し、[OK]をクリックする。
ログインできることを確認する。
初期パスワードを表示する。
sudo cat /etc/gitlab/initial_root_password |grep ^Password
ブラウザからアクセスする。
http://"my-ec2-gitlab"のパブリックIPv4アドレス"
ユーザは"root"、Passwordには確認した初期パスワードを入力して[Sign in]をクリックする。
ログインできたことを確認する。
[New project]をクリックする。
Create blank project をクリックする。
以下の通りに値を設定し、[Create Project]をクリックする Project name : nginx-apl-project Project URL : root Visibility Level : Public ※実際はセキュリティグループで制限しています。
作成されたことを確認する。
[+] > [New file]をクリックする。
ファイル名に"nginx-apl-repo/nginx-apl.yaml"を入力し、内容に以下を入力後、[Commit changes]をクリックする。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-apl
name: nginx-apl
namespace: nginx-apl
spec:
replicas: 1
selector:
matchLabels:
app: nginx-apl
template:
metadata:
labels:
app: nginx-apl
spec:
containers:
- image: 677345739748.dkr.ecr.us-east-2.amazonaws.com/nginx:v1
imagePullPolicy: Always
name: nginx
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx-apl-svc
namespace: nginx-apl
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-apl
type: LoadBalancer
作成されたことを確認します。
ArgoCDに同期設定を作成
これで最後となります。 ArgoCDにGitlabのマニフェストとEKSと同期させて、自動的にnginxのweb画面を作成します。
事前にnamespaceを作成します。
kubectl create namespace nginx-apl
ArgoCDにログインし、[+NEW APP]をクリックする。
[Edit AS YAML]をクリックしする。
以下の"GitlabのIPアドレス"部分を書き換え後に入力し、[SAVE]をクリックする。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: 'nginx-apl-sync'
spec:
destination:
server: 'https://kubernetes.default.svc'
namespace: nginx-apl
source:
repoURL: 'http://"GitlabのIPアドレス"/root/nginx-apl-project.git'
path: nginx-apl-repo
targetRevision: main
project: default
syncPolicy:
automated: {}
[CREATE]をクリックする。
作成したApplicationをクリックする。
ApplicationがGitlabとEKSで同期されます。 [nginx-apl-svc]をクリックする。
HOST NAMESの値を確認する。
ブラウザから接続する。文言が"Welcome to nginx"であることを確認する。
Gitlabの定義とEKSの同期を確認できました。 せっかくなので、Gitlabのマニフェストを変更し、EKSに反映されるか試してみましょう。
imageをv2に変更しました。
ArgoCDからPodが入れ替わったことを確認します。
ブラウザから接続する。文言が"Welcome to my nginx"に変わったことを確認する。 ArgoCDが仕事していますね!
後片付け
せっかく構築しましたが、起動したままだと課金され続けてしまうので、最後に削除しましょう。
ECRレポジトリの削除
ECR > リポジトリ をクリックし、nginxのレポジトリを選択し、[削除]をクリックする。
"delete"を入力し[削除]をクリックする。
EKSの削除
eksctl delete cluster -f eks.yaml
Management/GitlabServer等の削除
CloudFormation > スタック をクリックし、cfn-argocdのスタックを選択し、[削除]をクリックする。
[スタックの削除]をクリックする。
削除されたこと確認する。
Keypairの削除
EC2 > キーペアをクリックし、my-keypairを選択し、[アクション] > [削除]をクリックする。
"削除"を入力し、[削除]をクリックする。
削除されたことを確認する。
まとめ
今回、ArgoCD構築ガイドインフラ編とArgoCD編で合わせて 0からEKSやArgoCDを構築し、簡単な動作検証を行いました。 ArgoCDの使い方はまだまだあるので、いつか紹介したいと思います。 長い手順となりましたが、最後までお付き合いいただきありがとうございました。
【あわせて読みたい関連記事】
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのMarkus Spiske