Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
いろいろなAWSアカウントのArgo CDを統合した話
Search
Ryo Sakamoto
September 12, 2023
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
いろいろなAWSアカウントのArgo CDを統合した話
Ryo Sakamoto
September 12, 2023
More Decks by Ryo Sakamoto
See All by Ryo Sakamoto
ArgoCDとGitHub Self Hosted Runnerを使って リリース時間を1/4にした話
cwsakamoto
0
2.6k
Adventure around Kubernetes at Chatwork
cwsakamoto
5
8.3k
チャットワークにおけるKubernetesOnAWS.pdf
cwsakamoto
0
110
チャットワークにおけるKubernetesOnAWS.pdf
cwsakamoto
0
110
Kubernetes on AWS at Chatwork
cwsakamoto
0
1.9k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
310
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Side Projects
sachag
455
43k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Prompt Engineering for Job Search
mfonobong
0
340
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Accessibility Awareness
sabderemane
1
140
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Transcript
© Chatwork いろいろなAWSアカウントのArgo CDを統 合した話 2023年09月11日 SRE部 坂本 Chatwork株式会社
背景 AWSクロスアカウントへの対応 Argo CD ApplicationSetの導入 まとめ 1 2 3 4
AGENDA アジェンダ 4
自己紹介 3 • 坂本 諒 • SRE部所属 ◦ Kubernetesの管理やCI/CDの整備など •
趣味 ランニング ◦ 月200kmぐらい
会社概要 4 会社名 Chatwork株式会社 代表取締役CEO 山本 正喜 グループ従業員数 411名(2023年6月末日時点) 所在地
東京、大阪 設立 2004年11月11日
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株式会社にて選定。
今日話す内容 6 • https://creators-note.chatwork.com/entry/2023/07/10/1 51932
背景 1
ChatworkのEKS運用方針 8 • EKSクラスタの運用はマルチテナント • EKSクラスタのアップデートはBlue/Green ◦ 移行時には新バージョン、旧バージョンのEKSクラスタが稼働する • デプロイにはArgo
CDを利用する
統合前のArgo CDの環境 9 • 各EKSクラスタにArgo CDをインストール ◦ 導入当初、Argo CD自体の運用に慣れていなかったので、1番単純 な構成にしたかった
• それぞれのArgo CDが別々のURLを持つ ◦ EKSのバージョンをURLに入れていたのでそれぐらいしか違いはな いが、AWSアカウントが違ったりすると、ドメインが違っていたり
Argo CD統合の機運 10 prod 1.XX stg 1.XX prod 1.YY stg
1.YY
Argo CD統合の機運 11 prod 1.XX URLなんだっけ あのアプリケーションは 移行終わったっけ stg 1.XX
prod 1.YY stg 1.YY
Argo CD統合の機運 12 • Argo CDのURLが固定しにくい ◦ ChatworkではEKSアップデートをBlue/Greenでやっているので、 クラスタが入れ替わりやすい •
Github OAuth Appへの登録がつらい ◦ Argo CDの認証はGithubのユーザでSSOしている ◦ App作成のAPIがなく、手動でポチポチ • Argo CDは定常的な状態で運用したい ◦ 新規のEKSクラスタ作成時に既存のArgo CD経由でアプリケーショ ンを入れたい
Argo CD統合の機運 13 prod 1.XX stg 1.XX prod 1.YY stg
1.YY
Argo CD統合の方針 14 • Argo CDのEKSクラスタ運用の負担を減らす ◦ prod/stg,testの2環境 ▪ AWSのクロスアカウントにも対応
◦ Blue/Greenではなく、インプレースでのアップグレード ▪ 可能な限り停止させないようにはするが、アプリケーションの EKSクラスタほどの可用性を担保しない
AWSクロスアカウントへの対応 2
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管理できるようにしている
別クラスタに対するArgo CDの操作権限を付与(同じアカウント編) 17 Management Cluster Application Cluster Trust relationship AssumeRole
IRSA Role AWS Auth Role Iam identity mapping Application Controller
別クラスタに対するArgo CDの操作権限を付与(別アカウント) 18 Management Cluster Application Cluster Trust relationship AssumeRole
IRSA Role AWS Auth Role Iam identity mapping Application Controller
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管理できるようにしている
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のパス
Argo CDの操作権限をクロスアカウントに対応させる 21 Management Cluster Trust relationship AssumeRole IRSA Role
Role Repo Server
Argo CD plugin(helmfile)のAWSクロスアカウント対応 22 • 絵に書くとあっさりに見えますが ◦ Repo ServerがAssume Roleに対応していない
◦ helmfileがAssume Roleに対応していない ◦ Secrets Managerならクロスアカウントに対応しているけれど、 Parameter Storeの利用箇所を全箇所書き換え必要
Argo CD plugin(helmfile)のAWSクロスアカウント対応 23 • pluginのスクリプトにはなんでも書ける! • 絵に書くとあっさりに見えますが ◦ Repo
ServerがAssume Roleに対応していない ◦ helmfileがAssume Roleに対応していない ◦ Secrets Managerならクロスアカウントに対応しているけれど、 Parameter Storeの利用箇所を全箇所書き換え必要
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のスクリプト部分に下記を記載(ワンライナーで)
Argo CD ApplicationSetの導入 3
Argo CDのApplicationをどうやって管理するか 26 • 個別Argo CD時代は、App of Apps ◦ in-clusterしかなかったので、Applicationだけ
◦ ApplicationをApplicationで作成 ◦ App of Appsは なかなか大変 ▪ 本番はそれほど変わらないのでよいが、テスト環境とか自分が何 を触っているのか迷子になる • 統合Argo CDでは複数のクラスタを1つのArgo CDで管理するので、 ApplicationSetをテンプレートとして作成
Argo CDのApplicationSetで考慮した点 27 • Cluster Generatorの採用とCluster Credentialへの対応 ◦ 新規のEKSクラスタ用のCluster Credentialをapplyすると、
Applicationの作成まで自動 • applicationsetcontroller.policyの挙動 ◦ ApplicationSet -> Applicationを生成する際の挙動 ◦ いろいろなユースケースを考えてcreat-onlyに ▪ 2.8でApplicaitonSetごとに挙動を変えられるように🎉
Argo CDのApplicationSetで考慮した点 28 • preserveResourcesOnDeletionの挙動 ◦ applicationを消した場合のK8sのリソースをどうするのかの設定 ◦ applicationを作り直したい(特に導入初期)ことがあり、このパラメー タの存在を知らず、test環境が全部消えた
▪ Argo CD自体もApplicationSetで管理しているので、自分で自分 を消し始めたり ▪ applicationsetcontroller.policyがsync && preserveResourcesOnDeletionがfalse(デフォルト)だと ApplicationSetを消すとK8sのリソースまで消えるので注意
まとめ 4
まとめ 30 • 各EKSクラスタにいたArgo CDをまとめました • AWSのクロスアカウントにも対応させました • ApplicaitonSetを導入してApplicationの作成の自動化
今日話した内容 31 • https://creators-note.chatwork.com/entry/2023/07/10/1 51932
働くをもっと楽しく、創造的に