Share
Embed
Transcript
32 slides
-
背景 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株式会社にて選定。 -
統合前のArgo CDの環境 9 • 各EKSクラスタにArgo CDをインストール ◦ 導入当初、Argo CD自体の運用に慣れていなかったので、1番単純 な構成にしたかった
• それぞれのArgo CDが別々のURLを持つ ◦ EKSのバージョンをURLに入れていたのでそれぐらいしか違いはな いが、AWSアカウントが違ったりすると、ドメインが違っていたり -
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統合の方針 14 • Argo CDのEKSクラスタ運用の負担を減らす ◦ prod/stg,testの2環境 ▪ AWSのクロスアカウントにも対応
◦ Blue/Greenではなく、インプレースでのアップグレード ▪ 可能な限り停止させないようにはするが、アプリケーションの EKSクラスタほどの可用性を担保しない -
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 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の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のリソースまで消えるので注意