Soumettre la recherche
Mettre en ligne
Argo CD Deep Dive
•
Télécharger en tant que PPTX, PDF
•
0 j'aime
•
23,220 vues
shunki fujiwara
Suivre
Cloud Native Days Tokyo 2021の発表資料です
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 46
Télécharger maintenant
Recommandé
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
Hitachi, Ltd. OSS Solution Center.
データセンターネットワークでのPrometheus活用事例
データセンターネットワークでのPrometheus活用事例
Yahoo!デベロッパーネットワーク
Recommandé
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
Hitachi, Ltd. OSS Solution Center.
データセンターネットワークでのPrometheus活用事例
データセンターネットワークでのPrometheus活用事例
Yahoo!デベロッパーネットワーク
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
shunki fujiwara
Rootlessコンテナ
Rootlessコンテナ
Akihiro Suda
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021)
HayatoOkuma1
Argo CDについて
Argo CDについて
NTT Communications Technology Development
Contenu connexe
Tendances
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Platform - Japan
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
NTT DATA Technology & Innovation
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
shunki fujiwara
Rootlessコンテナ
Rootlessコンテナ
Akihiro Suda
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
例外設計における大罪
例外設計における大罪
Takuto Wada
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Tendances
(20)
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
Kuberneteの運用を支えるGitOps
Kuberneteの運用を支えるGitOps
Rootlessコンテナ
Rootlessコンテナ
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
例外設計における大罪
例外設計における大罪
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
SpringBootTest入門
SpringBootTest入門
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Similaire à Argo CD Deep Dive
実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021)
HayatoOkuma1
Argo CDについて
Argo CDについて
NTT Communications Technology Development
DBP-002_データ分析のさらに一歩先へ Cortana Intelligence Suite
DBP-002_データ分析のさらに一歩先へ Cortana Intelligence Suite
decode2016
INF-003_Azure でのセキュア ネットワーキング
INF-003_Azure でのセキュア ネットワーキング
decode2016
「第一部 日比谷ゴジラ迎撃作戦 戦略会議」製作秘話
「第一部 日比谷ゴジラ迎撃作戦 戦略会議」製作秘話
Nangok R/Studios
20131019 OSC@Tokyo CloudStackユーザー会
20131019 OSC@Tokyo CloudStackユーザー会
samemoon
[2019 01-19] AzureDevOps LT
[2019 01-19] AzureDevOps LT
Igarashi Toru
Similaire à Argo CD Deep Dive
(7)
実践! Argo cd & rollouts による canary release(cndt2021)
実践! Argo cd & rollouts による canary release(cndt2021)
Argo CDについて
Argo CDについて
DBP-002_データ分析のさらに一歩先へ Cortana Intelligence Suite
DBP-002_データ分析のさらに一歩先へ Cortana Intelligence Suite
INF-003_Azure でのセキュア ネットワーキング
INF-003_Azure でのセキュア ネットワーキング
「第一部 日比谷ゴジラ迎撃作戦 戦略会議」製作秘話
「第一部 日比谷ゴジラ迎撃作戦 戦略会議」製作秘話
20131019 OSC@Tokyo CloudStackユーザー会
20131019 OSC@Tokyo CloudStackユーザー会
[2019 01-19] AzureDevOps LT
[2019 01-19] AzureDevOps LT
Dernier
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Dernier
(11)
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Argo CD Deep Dive
1.
Argo CD Deep
Dive 2021.11.04
2.
2 Profile: 2019.4にfreee入社 以来ずっとSREやってます 主にKubernetesの構築運用設計やってます like: ゲーム ボードゲーム リアル脱出ゲーム trend: 藤原峻輝 SRE shunki fujiwara @renjikari プロフィール画像の トリミング方法
3.
01 はじめに 02 Argo
CDとArgo Family 03 コンセプト 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
4.
01 はじめに 02 Argo
CDとArgo Family 03 コンセプト 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
5.
5 今日の話の対象者 Deep Diveと銘うちましたが、前提知識は少なめにK8sについてある程度の知識を持っていれば理 解できるsessionにします。 すでにArgo CDを利用している人にはより詳細な挙動についての解説 そうでない人にも(GitOpsの実装の一つとしての)Argo
CDのコンセプトやアーキテクチャについて 解説します
6.
6 今日話さないこと ● argocdに関連する拡張ツール群↓に一応いまあるやつまとめてみました(抜け漏れ勘弁) ● argocd-notifications ○
https://github.com/argoproj-labs/argocd-notifications ● applicationset ○ https://github.com/argoproj-labs/applicationset ○ https://qiita.com/shmurata/items/a6ee4193e2d2c8a2d34c ○ Kind: Applicationを管理するもの ● argocd-operator ○ https://github.com/argoproj-labs/argocd-operator ○ argocd clusterの管理をしてくれるoperator ● argocd-image-updater ○ https://github.com/argoproj-labs/argocd-image-updater ○ まだ若いv0.11.0のとまだサポートされてないパターンある ● Argo CD以外のArgo projects ○ さわりだけ話すけどほぼ話さない
7.
今日のコンセプトは・・・
8.
公式ドキュメントより詳しく
9.
01 はじめに 02 Argo
CDとそのコンセプト 03 Argo Familiy 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
10.
Argo CDはKubernetes向けの宣言的なGitOpsツール です。
11.
11 Argo CDはKubernetes向けの宣言的なGitOpsツールです。 アプリケーションの定義/config/environmentは宣言的でバージョンコントロールできるべきです。 Argo CDではApplicationのデプロイやライフサイクルを自動的で監査可能で理解しやすいようにマ ネージメントしてくれます。 Argo
CD
12.
12 Argo CDはKubernetes向けの宣言的なGitOpsツールです。 ArgoCDはGitOps patternを使っています。 GitOps
pattern: Git repositoryをapplicationの定義のソースとするやり方 Weaveworks社が提唱しました GitOps
13.
13 ざっくりした図でArgo CDの流れを把握しまし ょう(公式のアーキテクチャ図を拝借) 1. Argo
CD clusterはK8s上で動いている 2. Argo CDはAPI/Repository/Contollerでできて いる 3. gitをはじめとするいろんなサービスと連携で きそう 4. Argo CD clusterから各K8s clusterにデプロイ している アーキテクチャ from 公式
14.
14 Argo CDのコアコンセプト Argo CDではいくつかのK8sリソース、及びGitOpsのための概念とプロセスでコンセプトが実現さ れています。 なかでも、今回のDeepなDiveに関連するコアなもののみ公式から抜粋
+ 補足していきます ● リソース ○ Application/Project ○ API Server ○ Application Controler ○ Repository Server ● 概念 ○ Live State ○ Target State ● プロセス ○ Sync ○ Refresh
15.
15 Application/project ● application ○ CRDによって定義されるresouce① ○
一つのK8s resourceのまとまり。1serviceを1applicationとするのがわかりやすそう ● project ○ CRDによって定義されるresouce② ○ applicationの論理的なgroup ○ 権限(認可)の管理に利用できる ○ projectの中でmanifest deploy先のK8s clusterを指定する。 ○ freeeでは基本的に1project = 1K8s clusterの運用をしている ○ appは1つのprojectに所属する ○ projectは複数のappに所属されうる
16.
16 Live State/Target State/Sync/Refresh LiveState:
現在の実際のstate Target State: codeで定義されたmanifestのstate. redisにcache可能 Sync: Target StateをK8sにapply(deploy)する Refresh: Target Stateを最新に更新する
17.
17 API Server API ServerはgRPC/RESTを受けるserverで、web
UI, CLI, その他の外部システムなどからリクエス トを受け付けます。 ● Kind: Deployment ● application の管理とstatus管理 ● applicationのoperationのinvoke(発火) ○ sync/rollback/user-defined actions ● repositoryとcluster credentialの管理 ● 外部のidentity providersとの認証認可の権限移譲 ○ ex) freeeではgithubのteamsでログインできて、権限管理もそれに紐付いている) ● RBAC ● Git webhook events
18.
18 Application Controler applicationのlive stateとtarget
stateの比較を行い、OutOfSyncの状態を検知できます live stateはK8s APIを叩いて現在の状態を取得します。TargetStateはargocd-repo-serverを使って manifestをgenerateして取得します また、lifecycle eventの発火にも責任をもっています(PreSync, Sync, PostSync)
19.
19 Repository Server repo サーバはgit
repositoryから取ってきたapplication manifestsのlocal cacheとして機能していま す。 以下の要素が入力されればK8s Manifestsを(tepmlateからの場合は生成して)returnしてくれます - repository URL - revision (commit, tag, branch) - application path - template specific settings: parameters, ksonnet environments, helm values.yaml
20.
20 かなりざっくりした図でArgo CDの流れを把握 しましょう(公式のアーキテクチャ図を拝借) 1. Argo
CD clusterはK8s上で動いている 2. Argo CDはAPI/Repository/Contollerでできて いる 3. gitをはじめとするいろんなサービスと連携で きそう 4. Argo CD clusterから各K8s clusterにデプロイ している アーキテクチャ from 公式
21.
01 はじめに 02 Argo
CDとそのコンセプト 03 Argo Familiy 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
22.
22 Argo Workflow: ● Kubernetes-nativeなワークフローエンジン ●
DAG(有向非巡回グラフ)も扱える Argo Rollouts ● Canary release/Blue Green Deployなどのdeployment戦略を可能に Argo Events ● event関連のツール ● 外部で起きたeventを監視したりあるいはwebhookなどで通知を受けてなにかを実行できる Argo Family
23.
01 はじめに 02 Argo
CDとそのコンセプト 03 Argo Familiy 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
24.
24 この図、結構ざっくり目 ● それぞれの矢印がどこを指してるのかざっ くりしてる ● Argo
CDの中でどんなことが行われているか 省略されている アーキテクチャ from 公式
25.
詳細な図を作ってみました
26.
26 変更箇所 ● 外部からのアクセスがどのリソースに来て いるかをはっきりさせた ● Argo
CD内のリクエストの流れの例を書いて みた アーキテクチャ 詳解図
27.
27 ● API Serverが外部からのリクエストを受ける ●
図には書きませんでしたが、その他のgit以 外の連携ツールからの通信もAPI Serverが受 ける アーキテクチャ 詳解図 クローズアップ①
28.
28 ● Sync ○ UI/CLIからsyncのコマンドが発行される ○
argo-cd serverがsyncされるように applicationのstateを変更 ○ それをapplication Contollerが監視 ○ App Clusterにdeploy アーキテクチャ 詳解図 クローズアップ②
29.
29 ● Refresh(の1パターン) ○ Application
ControllerがTarget Stateの revisionの差分チェック ○ Repository ServiceにManifest要求 ○ Repository Serviceがgitからcode とって きてGenerate Manifestする アーキテクチャ 詳解図 クローズアップ③
30.
01 はじめに 02 Argo
CDとそのコンセプト 03 Argo Familiy 04 アーキテクチャ詳解 05 Syncしたときの挙動をコ ードベースで追ってみる Agenda
31.
31 ● 先ほど紹介したこの図を実際にAPI callから コードレベルで追ってみます ●
というか実際にはコード読んでこの図を作 りました ○ 詳細なDocないので Sync時の動作をコードで追う
32.
32 WebUIでSyncボタンを押すとこんな感じでPostを投げています https://localhost:8080/api/v1/applications/guestbook/sync ちなみに環境はEKSの検証用クラスタにArgo CDクラスタを作ってportforwardingしています。 Sync時の動作をコードで追う① APIサーバにリクエストを投げる
33.
33 https://localhost:8080/swagger-ui#operation/ApplicationService_Sync のようにするとAPI referenceにアクセスできる Sync時の動作をコードで追う② APIリファレンス
34.
34 ここからコードの中身ですが一旦API Serverの整理をします argo-cdの中でAPI Serverのコードはここです またendpointはすべてprotocol
buffersによって生成されています。 ただしクラスター外部からの通信を受け取ることがあるため、ほとんどのendpointでgrpc-gatewayによるhttp -> gRPCのreverce proxyが設定されています https://github.com/argoproj/argo- cd/blob/513d8a4ae07e65e9590783007153043e78cfbeb6/server/application/application.proto#L306 Sync時の動作をコードで追う③ API endpoint
35.
36 https://github.com/argoproj/argo- cd/blob/513d8a4ae07e65e9590783007153043e78cfbeb6/pkg/apiclient/application/application.pb.gw.go#L816 func request_ApplicationService_Sync_0(...)からclient.syncで ↓ https://github.com/argoproj/argo-cd/blob/master/pkg/apiclient/application/application.pb.go ファイルの func
(c *applicationServiceClient) Sync ↓ func _ApplicationService_Sync_Handlerがよばれ ↓ 最終的に srv.(ApplicationServiceServer).Sync(ctx, req.(*ApplicationSyncRequest)) が呼ばれる このSyncはユーザが定義した(protobufによって生成されたものでない) func (s *Server) Sync(...) https://github.com/argoproj/argo- cd/blob/6262a8c750b27b254c330f9882ff26af7aac672c/server/application/application.go#L1346 Sync時の動作をコードで追う③ grpc gateway ~ sync用function
36.
37 func (s *Server)
Sync ↓ argo.goの func SetAppOperation() https://github.com/argoproj/argo-cd/blob/6262a8c750b27b254c330f9882ff26af7aac672c/util/argo/argo.go#L448 ↓ func (c *applications) Update() https://github.com/argoproj/argo- cd/blob/6262a8c750b27b254c330f9882ff26af7aac672c/pkg/client/clientset/versioned/typed/application/v1alpha1/app lication.go#L109 このUpdateでK8s上のkind:Applicationsをupdateしている Sync時の動作をコードで追う④ func Sync 〜 リソースの変更まで
37.
38 ● 今話したのは図のWEBUI ~
Update Stateの ところ ● Application controllerが実際にsyncするのは 別のコード体系なのでそちらをみていく Sync時の動作をコードで追う
38.
39 ❯ k get
-o yaml application guestbook apiVersion: argoproj.io/v1alpha1 kind: Application status: health: status: Missing operationState: finishedAt: "2021-11-02T18:36:14Z" message: successfully synced (no more tasks) operation: initiatedBy: username: admin retry: {} sync: dryRun: true resources: - kind: Service name: guestbook-ui namespace: default revision: 53e28ff20cc530b9ada2173fbbd64d48338583ba syncStrategy: hook: {} phase: Succeeded startedAt: "2021-11-02T18:36:14Z" syncResult: resources: - group: "" hookPhase: Succeeded kind: Service message: service/guestbook-ui configured (dry run) name: guestbook-ui namespace: default status: Synced syncPhase: Sync version: v1 revision: 53e28ff20cc530b9ada2173fbbd64d48338583ba source: path: guestbook repoURL: https://github.com/argoproj/argocd-example-apps.git application詳解 reconciledAt: "2021-11-03T17:56:05Z" resources: - health: status: Healthy kind: Service name: guestbook-ui namespace: default status: Synced version: v1 - group: apps health: status: Missing kind: Deployment name: guestbook-ui namespace: default status: OutOfSync version: v1 sourceType: Directory summary: {} sync: comparedTo: destination: namespace: default server: https://kubernetes.default.svc source: path: guestbook repoURL: https://github.com/argoproj/argocd-example-apps.git revision: 53e28ff20cc530b9ada2173fbbd64d48338583ba status: OutOfSync
39.
40 application ControllerはContainer起動時にrunされたときからgo routineでinformerを動かしている https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L598 func
(ctrl *ApplicationController) Run() informerは k8s.io/client-go/tools/cache で提供されていて、CustomControllerからK8sのリソースに関するeventを watchできる https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L1649 informer.AddEventHandler() でfuncを定義していてその中でresouceのadd/update時に次のスライドで説明する queueにkeyを追加する部分がある Sync時の動作をコードで追う⑤ application controllerのreconcile roopその1
40.
41 application ControllerはContainer起動時にrunされたときからgo routineでoperationをキュー管理している https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L598 func
(ctrl *ApplicationController) Run() ApplicationControllerはapplication get listを行うためのinterfaceやapplicationのstate, stateのCacheなどを持つ構造体 Sync時の動作をコードで追う⑤ application controllerのreconcile roopその2
41.
42 ● syncする場合はprocessAppOperationQueueItem() によって、operationQueueから実際にOperationを取得して ○
https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L678 ● processRequestedAppOperation()にてrequest ○ https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L1002 ● ↑のfuncでSyncAppStateを実行する ○ https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/sync.go#L46 ○ Syncのコマンドだが、実際の実行はargoproj/gitops-engineにまかせている ■ https://github.com/argoproj/gitops- engine/blob/2565df31d16fd28d34a442072cbb7bcbb7415d33/pkg/sync/sync_context.go#L368 Sync時の動作をコードで追う⑤ application controllerのOperation実行
42.
43 最後にsetOperationState() などでstate更新を行いlogを出力して一連の流れが完了 https://github.com/argoproj/argo- cd/blob/8a6b759c4a8705f30aafa1081e5068819f2abce7/controller/appcontroller.go#L1104 Sync時の動作をコードで追う⑥ application controllerのSync後の後処理
43.
44 ● Application Controllerの挙動を話した ●
application controllerは自発的にmonitorする のでendpointをもっていない ○ コード上もないし、k get svcしても application controllerが利用するserviceは ない ● 今回の話はあくまでSync(すでにrefreshは行 われている想定) ● refreshは自動でn分に一回実行したり、 UI/CLIから明示的にrefreshしたりできる。 ● Syncと似たようなQueueで管理されている Sync時の動作をコードで追う
44.
まとめ
45.
46 Argo CDの公式ドキュメントを読んでも詳細なところがわからない部分が多かったのでコードを読 みながら図を書いてみました。CNDTドリブンでしたが実業務にも役立ちそうな話があったのでよ きでした。 application contollerまわりはコードを読んだだけでは思想を理解しづらい部分があってチームメイ トに教えてもらいました。:kansha:
KubernetesのCustomContollerとしての実装なのでそこと関連 付けられるとコードが読みやすかったです。 実はdex-server(login時の認証まわり)についてなどは省くなどしていて実際にはもっと複雑な図に なります。 また、redis周りの利用(あるいはどういったものをmemoryに持っていてどういったものをredisに投 げているのかという分類)は読む時間がなかったので、いつか時間があったら再度まとめてみようか と思っています。 まとめ
Notes de l'éditeur
リソース Application/Project API Server Application Controler Repository Server 概念 Live State Target State プロセス Sync Refresh
ApplicationServiceServerのinterface .Sync{} はinterface としてだけpbファイルに定義されており、実態はユーザが実装する それがapplication.goにある これはregisterで登録している(がっつりGRPCの話でよくわからん)
ApplicationSyncRequest の中に様々な
途中のいらなさそうなものはバッサリカット https://github.com/argoproj/argo-cd/blob/6262a8c750b27b254c330f9882ff26af7aac672c/util/argo/argo.go#L458 で a.Status.OperationState = nil してたりしてる
ApplicationSyncRequest の中に様々な
ApplicationSyncRequest の中に様々な
ApplicationSyncRequest の中に様々な
ApplicationSyncRequest の中に様々な
・そしてその「スモールビジネスを、世界の主役に。」 ・スモールビジネスを「世界の」つまり「世の中の」主役するという使命の元ビジネスを続けてきた ・今それは願いから確信へと変わりつつある 【次項】創業時の想い ----- 改めて、「スモールビジネスを、世界の主役に。」こちらがfreee のミッションです。 私たちは、スモールビジネスを「世界の」つまり「世の中の」主役するという使命を掲げて走り続けてきました。 そして今、それは願いから確信へと変わりつつあります。
Télécharger maintenant