Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

ArgoCD_version_up_merit_and_precaution

 ArgoCD_version_up_merit_and_precaution

freeeでは、ArgoCDを用いてGitOpsによるKubernetesの運用をしています。
本セッションは、すでにArgoCDを本番運用している受講者向けのセッションです。
ArgoCDのversion upによって得られるメリットや最新機能、対応できる脆弱性の紹介をします。
またArgoCD自体の検証環境の重要性、version up作業前や作業時に確認しておきたい注意点についてもお話します。

https://event.cloudnativedays.jp/cndf2023/

hikaru-miyazawa

August 03, 2023
Tweet

More Decks by hikaru-miyazawa

Other Decks in Technology

Transcript

  1. 2 2021年まで美容系SNSスタートアップの
 株式会社Meily創業メンバー/SRE。
 
 freeeに2022年1月入社。
 SREのDeveloper eXperience Teamで
 freeeの開発者の体験が向上する取り組みを 行ってきました。


    
 好きな技術:Kubernetes/ArgoCD/Helm/ARC/
 SRENEXT コアスタッフ
 趣味:ポケカ、カラオケ、ポーカー、ボドゲ
 miyahika
 Developer eXperience 
 Hikaru Miyazawa
 プロフィール画像の
 トリミング方法

  2. 3 freee の Developer eXperience Team とは
 その名の通り、開発者の体験を向上するためのチームです。
 
 •

    主な業務領域
 ◦ CI/CDパイプライン
 ◦ 開発環境の改善
 ◦ 開発生産性の計測と可視化
 
 他社ではいわゆるDevOpsチームが担当することが多い領域です。
 
 チームの技術スタック
 Kubernetes, ArgoCD, GitHub Actions, Terraform, CircleCI, Datadogなど

  3. 4 01
 05
 06
 02
 07
 03
 04
 はじめに
 ArgoCDや周辺用語の解説


    ArgoCDの構成
 ArgoCD version upの
 メリットと追加機能の紹介
 ArgoCD自体の
 検証環境の必要性
 version up
 作業時の注意点
 まとめ
 本日のアジェンダ

  4. 5 今回の話の対象者
 
 • すでにArgoCDを本番運用している
 • ArgoCDのversion upの実施にハードルを感じている
 • ArgoCDの最新機能が知りたい


    • これからArgoCD×Kubernetesの運用をしていきたい
 
 日本語の情報が少なく、英語の情報をまとめているので
 一部正確でない可能性があります。
 @miyahika214までメッセージいただけると助かります。

  5. 7 ArgoCDとは
 ここにサブタイトルを入れてください。ここにサブタイトルを入れてください。
 • Kubernetes用の継続的デリバリーツール。
 
 • Git で管理された Kubernetes

    manifestの変更を
 検知し、Kubernetes クラスタへデプロイします。
 
 • 他の GitOps ツールと比べGUI がある点が特徴。
 
 • GUI を通して設定や状態の確認、手動での Sync などを行う ことが可能です。

  6. 8 GitOpsとは
 • GitOpsはWeaveworks社が提唱し始めた継続的デリバリの手法
 
 • Git リポジトリの状態に基づいて、インフラストラクチャとソフトウェアの管理を
 宣言的に行います。 


    
 • システム全体がGitで管理されているため、変更の追跡やロールバックが容易。
 
 • 開発者が作成したPRがマージされるとソフトウェアのデプロイや運用タスクが自動で適用されてい くイメージです。
 https://www.atlassian.com/ja/git/tutorials/gitops 

  7. 9 ArgoCDと組み合わせるmanifest管理手法
 • kustomize applications
 ◦ kubernetes manifest 管理ツール
 


    • helm charts
 ◦ kubernetes manifest 管理ツール
 ◦ helmfile を組み合わせることで、宣言的に manifest を生成できる
 
 • jsonnet files
 ◦ Googleが開発している JSONテンプレート言語
 
 • 直接 YAML/json 形式のmanifestをディレクトリで管理する
 ◦ テンプレート化する運用が出来ず変更に弱い
 https://argo-cd.readthedocs.io/en/stable/#how-it-works

  8. 10 Helm Chartとは
 • Helm Chart とは、アプリケーションを Kubernetes クラスタにデプロイするために
 必要なリソースをすべてパッケージ化して運用できるツールです


    
 • パッケージには、Deployment、Service、Secretsおよび
 アプリケーションの状態を定義した各種 YAML 設定ファイルが含まれます
 
 • 予め用意した共通 Helm Chart を利用することで
 manifest をテンプレート化でき、運用が楽になります
 
 • オープンソースコミュニティが提供している Chart を利用できることもメリット
 https://circleci.com/ja/blog/what-is-helm/

  9. 11 Helmfile とは
 • Helmfile とは Helm Chart をより宣言的にデプロイするためのものです
 


    Helmfile を導入することでできること
 
 ①helmfile.yaml ファイル内で必要な値を付与できる
 ◦ Helm Chart では、コードをもとに manifest を生成するとき
 helm コマンドにオプションで値を渡す必要がある
 ②Helm Chart で定義されていない独自のリソースをデプロイできる
 ③Chart の再利用性を高められる
 ◦ 環境変数が利用でき、integration/staging/production などの
 各環境で設定を再利用できる
 https://qiita.com/ririco/items/e0471cf279314aef485e

  10. 12 freeeにおける manifest のバージョン管理
 
 manifest のバージョン管理
 
 Helm Chart

    × helmfile を採用しています。
 
 • Github
 ◦ Helm Chart
 ▪ 共通 chart で k8s リソースをパッケージ化
 ◦ helmfile
 ▪ 設定をテンプレート化
 ▪ 環境変数に応じて manifest を生成
 

  11. 13 freeeにおけるArgoCDの構成
 Github の Helm Chart や helmfile の変更が merge

    される
 生成される manifest の差分を検知して、それぞれの EKS Cluster にデプロイ
 https://dev.classmethod.jp/articles/argocd-for-external-cluster/

  12. 15 脆弱性に対応できる
 ArgoCD の Github から確認できます。
 
 2021年 6件 critical

    1件
 2022年 13件 critical 3件
 2023年 5件 critical 2件
 全24件の脆弱性が報告されています。
 
 パッチバージョンだけでもあげることをオススメします!
 https://github.com/argoproj/argo-cd/security/advisories 

  13. 16 ArgoCD version upで使えるようになるオススメ機能!
 v2.3.x ~ v2.4.x
 ArgoCD ログの閲覧権限を細かく制御できるようになりました!
 applicationは閲覧できるが、logは閲覧できないというような設定が可能に!


    
 
 
 Old:
 p, role:staging-db-admins, applications, get, staging-db-admins/*, allow
 
 New:
 p, role:staging-db-admins, applications, get, staging-db-admins/*, allow
 p, role:staging-db-admins, logs, get, staging-db-admins/*, allow
 
 この設定を有効にする記述:
 server.rbac.log.enforce.enable: "true"
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.3-2.4/

  14. 17 ArgoCD version upで使えるようになるオススメ機能!
 v2.3.x ~ v2.4.x
 exec リソースに対してRBAC 権限をつけられるように!


    v2.4.x ~ v2.5.x
 applicationsets リソースに対してRBAC権限をつけられるように!
 Old:
 p, role:org-admin, *, create, *, allow
 
 New:
 p, role:org-admin, clusters, create, *, allow
 p, role:org-admin, projects, create, *, allow
 p, role:org-admin, applications, create, *, allow
 ~~~省略~~~
 *にはexecとapplicationsetは含まれません。別々に1つずつ記述することが推奨に
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.3-2.4/
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.4-2.5/

  15. 18 ArgoCD version upで使えるようになるオススメ機能!
 v2.5.x ~ v2.6.x
 
 一時停止されたジョブのあるアプリケーションが
 「Progressing(進行中)」ではなく


    「Suspended(一時停止)」
 と正しく表示されるようになります
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.5-2.6/

  16. 19 ArgoCD version upで使えるようになるオススメ機能!
 v2.6.x ~ v2.7.x
 ディープリンクテンプレートが使えるようになりました!
 
 利用例)

    logの閲覧
 ArgoCD WEBUIで閲覧 → DatadogやSplunkなどのURLを生成し表示できる
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.6-2.7/
 https://argo-cd.readthedocs.io/en/stable/operator-manual/deep_links/
 # sample resource level links
 resource.links: |
 - url: https://mycompany.splunk.com?search={{.resource.metadata.name}}&
 env={{.project.metadata.label.env}}
 title: Splunk
 if: resource.kind == "Pod" || resource.kind == "Deployment"

  17. 20 ArgoCD version upで使えるようになるオススメ機能!
 v2.6.x ~ v2.7.x
 proxy extensionが使えるようになりました!
 


    • UI extension
 ◦ ArgoCD の WEB UI 上にカスタマイズしたタブを追加できる拡張機能
 
 • proxy extension
 ◦ バックエンドのデータにアクセスできる機能を追加することができる
 ◦ Argo CD API サーバーは、受信リクエストをバックエンド サービスに
 転送する前に認証および承認するリバース プロキシとして機能します。
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.6-2.7/
 https://argo-cd.readthedocs.io/en/stable/developer-guide/extensions/proxy-extensions/

  18. 22 ArgoCD version upに含まれる破壊的変更について
 マイナーバージョンのアップデートでも破壊的変更を含むことがあります
 
 例) v2.2.x ~ v2.3.x


    ApplicationSet
 Notification
 上記2つ別で開発されていたがArgoCDにバンドルされた
 
 例) v2.3.x ~ v2.4.x
 Helm 2 サポート終了
 pluginで利用していた環境変数に「ARGOCD_ENV_」というPrefixがつく

  19. 24 ArgoCD自体の検証環境の必要性
 
 ArgoCD専用の検証環境があるとversion upの検証を
 安全に実施できるのでオススメです。
 
 integration ArgoCD →

    integrationのリソース
 staging ArgoCD → stagingのリソース
 production ArgoCD → productionのリソース
 +
 検証用ArgoCD → 検証用のリソース
 
 

  20. 25 ArgoCD自体の検証環境の必要性
 
 ArgoCD専用の検証環境
 
 • version up 作業手順の確立
 •

    version up 後の動作確認
 • version up 復旧手順の確認
 • 権限設定の確認
 • 新機能の検証
 • ArgoCDの細かい仕様の確認
 
 →実リソースへの影響を考えたり、デプロイを止めたりせずに検証ができる

  21. 26 version up作業時の注意点
 
 
 
 • メジャーバージョンでは、下位互換性のない動作変更が導入されている
 ◦ バックアップをとる


    ◦ 復旧手順を作る
 • マイナーバージョンは1つずつあげる(オススメ)
 ◦ 破壊的変更を含むことがあるため
 ◦ 復旧手順もあるとよい
 • パッチバージョンは基本的には何も考えず最新にしてもよい
 ◦ 検証環境で問題なければ順次他の環境にも適用していく
 ◦ 
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/overview/
 https://artifacthub.io/packages/helm/argo/argo-cd

  22. 27 version up作業時の注意点
 
 
 
 • 構成によってversion upの仕方が違う
 ◦

    公式Doc: kubectl applyで直接 ArgoCD の新 version manifest を apply
 ◦ freee: ArgoCD helm chart の version を上げて ArgoCD からSync する
 
 • 旧 version と新 versionで同じ manifest が生成されているか
 • AutoSyncをオフにする
 ◦ 間違った manifest が生成されていた場合に sync されないようにする
 https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/overview/
 https://artifacthub.io/packages/helm/argo/argo-cd

  23. 28 version up作業時の注意点
 
 
 • Helm,kustomize, jsonnetの対応versionが変わるので合わせてupdateする
 
 •

    ArgoCD CLIのversionを上げる
 ◦ 新バージョンに対応していないとCLIが落ちてしまうので注意
 
 • リソース削除時の挙動と設定を理解して進める
 ◦ preserveResourcesOnDeletion
 ▪ applicationsetを削除した場合に子リソースを削除するかどうかの設定
 ◦ cascade delete:連鎖削除
 ▪ prune sync 時に、親子関係があるリソースの削除を制御

  24. 29 今後やりたいこと
 • intgration環境、staging環境の分離
 
 • 最新のv2.7.x への追従
 ◦ deep

    link template 機能を使いたい
 ◦ proxy extension 機能を使いたい
 
 • 検証環境 ArgoCD 自動アップグレード

  25. 30 まとめ
 • ArgoCD や周辺用語について
 • ArgoCD と組み合わせる manifest 管理手法


    • version upのメリット
 ◦ 脆弱性対応、最新機能、bug fix
 • 検証用のArgoCDを持つのがオススメ
 • version up 時の注意点
 
 安全に version up をして追加機能を使い倒しましょう!