$30 off During Our Annual Pro Sale. View Details »

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

Ryo Sakamoto
September 12, 2023
280

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

Ryo Sakamoto

September 12, 2023
Tweet

Transcript

  1. © Chatwork
    いろいろなAWSアカウントのArgo CDを統
    合した話
    2023年09月11日 SRE部 坂本
    Chatwork株式会社

    View Slide

  2. 背景
    AWSクロスアカウントへの対応
    Argo CD ApplicationSetの導入
    まとめ
    1
    2
    3
    4
    AGENDA
    アジェンダ
    4

    View Slide

  3. 自己紹介
    3
    ● 坂本 諒
    ● SRE部所属
    ○ Kubernetesの管理やCI/CDの整備など
    ● 趣味 ランニング
    ○ 月200kmぐらい

    View Slide

  4. 会社概要
    4
    会社名
    Chatwork株式会社
    代表取締役CEO
    山本 正喜
    グループ従業員数
    411名(2023年6月末日時点)
    所在地
    東京、大阪
    設立
    2004年11月11日

    View Slide

  5. 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株式会社にて選定。

    View Slide

  6. 今日話す内容
    6
    ● https://creators-note.chatwork.com/entry/2023/07/10/1
    51932

    View Slide

  7. 背景
    1

    View Slide

  8. ChatworkのEKS運用方針
    8
    ● EKSクラスタの運用はマルチテナント
    ● EKSクラスタのアップデートはBlue/Green
    ○ 移行時には新バージョン、旧バージョンのEKSクラスタが稼働する
    ● デプロイにはArgo CDを利用する

    View Slide

  9. 統合前のArgo CDの環境
    9
    ● 各EKSクラスタにArgo CDをインストール
    ○ 導入当初、Argo CD自体の運用に慣れていなかったので、1番単純
    な構成にしたかった
    ● それぞれのArgo CDが別々のURLを持つ
    ○ EKSのバージョンをURLに入れていたのでそれぐらいしか違いはな
    いが、AWSアカウントが違ったりすると、ドメインが違っていたり

    View Slide

  10. Argo CD統合の機運
    10
    prod 1.XX stg 1.XX prod 1.YY stg 1.YY

    View Slide

  11. Argo CD統合の機運
    11
    prod 1.XX
    URLなんだっけ
    あのアプリケーションは
    移行終わったっけ
    stg 1.XX prod 1.YY stg 1.YY

    View Slide

  12. Argo CD統合の機運
    12
    ● Argo CDのURLが固定しにくい
    ○ ChatworkではEKSアップデートをBlue/Greenでやっているので、
    クラスタが入れ替わりやすい
    ● Github OAuth Appへの登録がつらい
    ○ Argo CDの認証はGithubのユーザでSSOしている
    ○ App作成のAPIがなく、手動でポチポチ
    ● Argo CDは定常的な状態で運用したい
    ○ 新規のEKSクラスタ作成時に既存のArgo CD経由でアプリケーショ
    ンを入れたい

    View Slide

  13. Argo CD統合の機運
    13
    prod 1.XX stg 1.XX prod 1.YY stg 1.YY

    View Slide

  14. Argo CD統合の方針
    14
    ● Argo CDのEKSクラスタ運用の負担を減らす
    ○ prod/stg,testの2環境
    ■ AWSのクロスアカウントにも対応
    ○ Blue/Greenではなく、インプレースでのアップグレード
    ■ 可能な限り停止させないようにはするが、アプリケーションの
    EKSクラスタほどの可用性を担保しない

    View Slide

  15. AWSクロスアカウントへの対応
    2

    View Slide

  16. 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管理できるようにしている

    View Slide

  17. 別クラスタに対するArgo CDの操作権限を付与(同じアカウント編)
    17
    Management
    Cluster
    Application
    Cluster
    Trust relationship
    AssumeRole
    IRSA Role AWS Auth Role
    Iam identity mapping
    Application Controller

    View Slide

  18. 別クラスタに対するArgo CDの操作権限を付与(別アカウント)
    18
    Management
    Cluster
    Application
    Cluster
    Trust relationship
    AssumeRole
    IRSA Role AWS Auth Role
    Iam identity mapping
    Application Controller

    View Slide

  19. 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管理できるようにしている

    View Slide

  20. 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のパス

    View Slide

  21. Argo CDの操作権限をクロスアカウントに対応させる
    21
    Management
    Cluster
    Trust relationship
    AssumeRole
    IRSA Role Role
    Repo Server

    View Slide

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

    View Slide

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

    View Slide

  24. 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のスクリプト部分に下記を記載(ワンライナーで)

    View Slide

  25. Argo CD ApplicationSetの導入
    3

    View Slide

  26. Argo CDのApplicationをどうやって管理するか
    26
    ● 個別Argo CD時代は、App of Apps
    ○ in-clusterしかなかったので、Applicationだけ
    ○ ApplicationをApplicationで作成
    ○ App of Appsは なかなか大変
    ■ 本番はそれほど変わらないのでよいが、テスト環境とか自分が何
    を触っているのか迷子になる
    ● 統合Argo CDでは複数のクラスタを1つのArgo CDで管理するので、
    ApplicationSetをテンプレートとして作成

    View Slide

  27. Argo CDのApplicationSetで考慮した点
    27
    ● Cluster Generatorの採用とCluster Credentialへの対応
    ○ 新規のEKSクラスタ用のCluster Credentialをapplyすると、
    Applicationの作成まで自動
    ● applicationsetcontroller.policyの挙動
    ○ ApplicationSet -> Applicationを生成する際の挙動
    ○ いろいろなユースケースを考えてcreat-onlyに
    ■ 2.8でApplicaitonSetごとに挙動を変えられるように🎉

    View Slide

  28. Argo CDのApplicationSetで考慮した点
    28
    ● preserveResourcesOnDeletionの挙動
    ○ applicationを消した場合のK8sのリソースをどうするのかの設定
    ○ applicationを作り直したい(特に導入初期)ことがあり、このパラメー
    タの存在を知らず、test環境が全部消えた
    ■ Argo CD自体もApplicationSetで管理しているので、自分で自分
    を消し始めたり
    ■ applicationsetcontroller.policyがsync &&
    preserveResourcesOnDeletionがfalse(デフォルト)だと
    ApplicationSetを消すとK8sのリソースまで消えるので注意

    View Slide

  29. まとめ
    4

    View Slide

  30. まとめ
    30
    ● 各EKSクラスタにいたArgo CDをまとめました
    ● AWSのクロスアカウントにも対応させました
    ● ApplicaitonSetを導入してApplicationの作成の自動化

    View Slide

  31. 今日話した内容
    31
    ● https://creators-note.chatwork.com/entry/2023/07/10/1
    51932

    View Slide

  32. 働くをもっと楽しく、創造的に

    View Slide