Upgrade to Pro — share decks privately, control downloads, hide ads and more …

いろいろなAWSアカウントのArgo CDを統合した話

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Ryo Sakamoto Ryo Sakamoto
September 12, 2023
1.2k

いろいろなAWSアカウントのArgo CDを統合した話

Avatar for Ryo Sakamoto

Ryo Sakamoto

September 12, 2023
Tweet

Transcript

  1. Chatworkとは 5 効率的に情報共有できる グループチャット 仕事の見える化ができる タスク管理 見落としがなくなる ファイル管理 いつでも会議ができる ビデオ/音声通話

    * BOXIL SaaS AWARD 2022「ランキング部門 コラボレーション部門賞」「ベスト評価賞 (初期設定の容易さNo.1、価格の満足度No.1)」を受賞 BOXIL「Chatwork」口コミ評価 * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。 * 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。
  2. 統合前のArgo CDの環境 9 • 各EKSクラスタにArgo CDをインストール ◦ 導入当初、Argo CD自体の運用に慣れていなかったので、1番単純 な構成にしたかった

    • それぞれのArgo CDが別々のURLを持つ ◦ EKSのバージョンをURLに入れていたのでそれぐらいしか違いはな いが、AWSアカウントが違ったりすると、ドメインが違っていたり
  3. Argo CD統合の機運 12 • Argo CDのURLが固定しにくい ◦ ChatworkではEKSアップデートをBlue/Greenでやっているので、 クラスタが入れ替わりやすい •

    Github OAuth Appへの登録がつらい ◦ Argo CDの認証はGithubのユーザでSSOしている ◦ App作成のAPIがなく、手動でポチポチ • Argo CDは定常的な状態で運用したい ◦ 新規のEKSクラスタ作成時に既存のArgo CD経由でアプリケーショ ンを入れたい
  4. Argo CD統合の方針 14 • Argo CDのEKSクラスタ運用の負担を減らす ◦ prod/stg,testの2環境 ▪ AWSのクロスアカウントにも対応

    ◦ Blue/Greenではなく、インプレースでのアップグレード ▪ 可能な限り停止させないようにはするが、アプリケーションの EKSクラスタほどの可用性を担保しない
  5. AWSクロスアカウントへの対応 16 • Argo CDの操作権限のAWSクロスアカウントへの対応 ◦ Argo CDのPodはIRSAでRole付与 ◦ EKSクラスタは複数のAWSアカウントに存在している

    • Argo CDのplugin(helmfile)のAWSクロスアカウントへの対応 ◦ Chatworkではhelmfileを利用している ◦ https://github.com/chatwork/dockerfiles/tree/master/argocd-h elmfile-plugin ◦ helmfileの中でParameter Storeを参照して、クレデンシャルを含む helmfileをGit管理できるようにしている
  6. Argo CD plugin(helmfile)のAWSクロスアカウント対応 19 • Chatworkではhelmfileを利用している ◦ pluginのimageを公開 ▪ sidecar形式に対応

    ▪ https://github.com/chatwork/dockerfiles/tree/master/argoc d-helmfile-plugin • helmfileの中でParameter Storeを参照して、クレデンシャルを含む helmfileをGit管理できるようにしている
  7. helmfileの例(settings.yaml.gotmpl) datadog: apiKey: ref+awsssm://kubernetes/datadog/apiKey?region=XXX logLevel: {{ .Values.datadog.logLevel }} collectEvents: true

    clusterChecksRunner: enabled: true replicas: {{ .Values.datadog.clusterChecksRunner.replicas }} resources: {{- toYaml .Values.datadog.clusterChecksRunner.resources | nindent 4}} Parameter Storeのパス
  8. Argo CD plugin(helmfile)のAWSクロスアカウント対応 22 • 絵に書くとあっさりに見えますが ◦ Repo ServerがAssume Roleに対応していない

    ◦ helmfileがAssume Roleに対応していない ◦ Secrets Managerならクロスアカウントに対応しているけれど、 Parameter Storeの利用箇所を全箇所書き換え必要
  9. Argo CD plugin(helmfile)のAWSクロスアカウント対応 23 • pluginのスクリプトにはなんでも書ける! • 絵に書くとあっさりに見えますが ◦ Repo

    ServerがAssume Roleに対応していない ◦ helmfileがAssume Roleに対応していない ◦ Secrets Managerならクロスアカウントに対応しているけれど、 Parameter Storeの利用箇所を全箇所書き換え必要
  10. Argo CD plugin(helmfile)のAWSクロスアカウント対応 24 unset AWS_SESSION_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY; read AWS_ACCESS_KEY_ID

    AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN<<< $(aws sts assume-role --role-arn $ARGOCD_ENV_REPO_SERVER_IAM_ROLE_ARN --role-session-name argocd-reposerver --output json | jq -r '.Credentials | [.AccessKeyId ,.SecretAccessKey ,.SessionToken] | join(" ")' ); export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN; env > /tmp/env; helmfile -q --environment $ARGOCD_ENV_HELMFILE_ENV template --include-crds --skip-tests • pluginのスクリプト部分に下記を記載(ワンライナーで)
  11. Argo CDのApplicationをどうやって管理するか 26 • 個別Argo CD時代は、App of Apps ◦ in-clusterしかなかったので、Applicationだけ

    ◦ ApplicationをApplicationで作成 ◦ App of Appsは なかなか大変 ▪ 本番はそれほど変わらないのでよいが、テスト環境とか自分が何 を触っているのか迷子になる • 統合Argo CDでは複数のクラスタを1つのArgo CDで管理するので、 ApplicationSetをテンプレートとして作成
  12. Argo CDのApplicationSetで考慮した点 27 • Cluster Generatorの採用とCluster Credentialへの対応 ◦ 新規のEKSクラスタ用のCluster Credentialをapplyすると、

    Applicationの作成まで自動 • applicationsetcontroller.policyの挙動 ◦ ApplicationSet -> Applicationを生成する際の挙動 ◦ いろいろなユースケースを考えてcreat-onlyに ▪ 2.8でApplicaitonSetごとに挙動を変えられるように🎉
  13. Argo CDのApplicationSetで考慮した点 28 • preserveResourcesOnDeletionの挙動 ◦ applicationを消した場合のK8sのリソースをどうするのかの設定 ◦ applicationを作り直したい(特に導入初期)ことがあり、このパラメー タの存在を知らず、test環境が全部消えた

    ▪ Argo CD自体もApplicationSetで管理しているので、自分で自分 を消し始めたり ▪ applicationsetcontroller.policyがsync && preserveResourcesOnDeletionがfalse(デフォルト)だと ApplicationSetを消すとK8sのリソースまで消えるので注意