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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Tell your own story through comics
letsgokoyo
1
950
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
HDC tutorial
michielstock
2
700
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Are puppies a ranking factor?
jonoalderson
1
3.5k
Claude Code のすすめ
schroneko
67
230k
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
働くをもっと楽しく、創造的に