見出し画像

ArgoCD構築ガイド(ArgoCD編)

はじめに

こんにちは、インフラエンジニアの北野です。
今回のブログでは、ArgoCDの構築手順と基本的な設定方法と動作確認の結果をご紹介しようと思います。
ArgoCD構築ガイド(インフラ編)では、コンテナ環境を動かすために必須となるEKSとECRレポジトリの作成までを実施しました。 以下の手順の1~3までですね。

  1. ManagementサーバやGitlabサーバを配置するVPC、ネットワーク設定、サーバの構築

  2. EKSの構築

  3. ECRにレポジトリを作成

  4. ArgoCDの導入

  5. ECRレポジトリにimageをpush

  6. GitlabにマニフェストをCommit

  7. 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の使い方はまだまだあるので、いつか紹介したいと思います。 長い手順となりましたが、最後までお付き合いいただきありがとうございました。


【あわせて読みたい関連記事】


執筆者プロフィール:北野 啓史
ITベンダーで13年間インフラエンジニアとして金融、人材などのお客様のITシステムの開発に携わってきた。
SHIFTには2021年に入社し、現在はコンテナ基盤のインフラ設計・構築を担当している。

お問合せはお気軽に
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:UnsplashMarkus Spiske