Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

背景 1

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Argo CD ApplicationSetの導入 3

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

まとめ 4

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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