Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
shunki fujiwara
PPTX, PDF
29,022 views
Argo CD Deep Dive
Cloud Native Days Tokyo 2021の発表資料です
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Downloaded 32 times
1
/ 46
2
/ 46
3
/ 46
4
/ 46
5
/ 46
6
/ 46
7
/ 46
8
/ 46
9
/ 46
10
/ 46
11
/ 46
12
/ 46
13
/ 46
14
/ 46
15
/ 46
16
/ 46
17
/ 46
18
/ 46
19
/ 46
20
/ 46
21
/ 46
22
/ 46
23
/ 46
24
/ 46
25
/ 46
26
/ 46
27
/ 46
28
/ 46
29
/ 46
30
/ 46
31
/ 46
32
/ 46
33
/ 46
34
/ 46
35
/ 46
36
/ 46
37
/ 46
38
/ 46
39
/ 46
40
/ 46
41
/ 46
42
/ 46
43
/ 46
44
/ 46
45
/ 46
46
/ 46
More Related Content
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
by
NTT DATA Technology & Innovation
PPTX
Dockerからcontainerdへの移行
by
Akihiro Suda
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
PDF
爆速クエリエンジン”Presto”を使いたくなる話
by
Kentaro Yoshida
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
PPTX
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
by
NTT DATA Technology & Innovation
Dockerからcontainerdへの移行
by
Akihiro Suda
コンテナ未経験新人が学ぶコンテナ技術入門
by
Kohei Tokunaga
爆速クエリエンジン”Presto”を使いたくなる話
by
Kentaro Yoshida
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
by
NTT DATA Technology & Innovation
Docker Compose 徹底解説
by
Masahito Zembutsu
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
by
NTT DATA Technology & Innovation
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
by
NTT DATA Technology & Innovation
What's hot
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
by
Google Cloud Platform - Japan
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
PDF
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
by
NTT DATA Technology & Innovation
PDF
DockerとPodmanの比較
by
Akihiro Suda
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PPTX
KubernetesバックアップツールVeleroとちょっとした苦労話
by
imurata8203
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PPTX
Amazon EKS によるスマホゲームのバックエンド運用事例
by
gree_tech
PDF
コンテナにおけるパフォーマンス調査でハマった話
by
Yuta Shimada
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
by
Preferred Networks
PDF
Nervesが開拓する「ElixirでIoT」の新世界
by
Hideki Takase
PPTX
Rootlessコンテナ
by
Akihiro Suda
PDF
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
PPTX
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
PDF
Dockerからcontainerdへの移行
by
Kohei Tokunaga
PDF
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
by
Preferred Networks
PPTX
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
by
NTT DATA Technology & Innovation
PPTX
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
by
NTT DATA Technology & Innovation
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
by
Google Cloud Platform - Japan
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
by
NTT DATA Technology & Innovation
DockerとPodmanの比較
by
Akihiro Suda
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
KubernetesバックアップツールVeleroとちょっとした苦労話
by
imurata8203
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
Amazon EKS によるスマホゲームのバックエンド運用事例
by
gree_tech
コンテナにおけるパフォーマンス調査でハマった話
by
Yuta Shimada
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
by
Preferred Networks
Nervesが開拓する「ElixirでIoT」の新世界
by
Hideki Takase
Rootlessコンテナ
by
Akihiro Suda
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
Azure Api Management 俺的マニュアル 2020年3月版
by
貴志 上坂
Dockerからcontainerdへの移行
by
Kohei Tokunaga
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
by
Preferred Networks
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
by
NTT DATA Technology & Innovation
分析指向データレイク実現の次の一手 ~Delta Lake、なにそれおいしいの?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
by
NTT DATA Technology & Innovation
Similar to Argo CD Deep Dive
PDF
実践! Argo cd & rollouts による canary release(cndt2021)
by
HayatoOkuma1
PPTX
Argo CDについて
by
NTT Communications Technology Development
PDF
RancherとGitOps的な話
by
YASUKAZU NAGATOMI
PDF
Storm×couchbase serverで作るリアルタイム解析基盤
by
NTT Communications Technology Development
PDF
コンテナ時代にインフラエンジニアは何をするのか
by
gree_tech
PDF
KubeCon + CloudNativeCon Europe 2019 参加報告
by
Takashi Natsume
PDF
運用に自動化を求めるのは間違っているだろうか
by
Masahito Zembutsu
PPTX
DevAx::connect はじめました
by
政雄 金森
PDF
GitLab Auto DevOps with Container CI/CD
by
Shingo Kitayama
PDF
クラウドを最大限活用するinfrastructure as codeを考えよう
by
NTT Communications Technology Development
PDF
Hadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjp
by
Yahoo!デベロッパーネットワーク
PDF
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
by
Masaya Aoyama
PDF
PayPayでのk8s活用事例
by
PayPay Corporation
PDF
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
by
Kazumi OHIRA
PDF
俺のTerraform CI/CD ライフサイクル
by
HonMarkHunt
PDF
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
by
Masaya Aoyama
実践! Argo cd & rollouts による canary release(cndt2021)
by
HayatoOkuma1
Argo CDについて
by
NTT Communications Technology Development
RancherとGitOps的な話
by
YASUKAZU NAGATOMI
Storm×couchbase serverで作るリアルタイム解析基盤
by
NTT Communications Technology Development
コンテナ時代にインフラエンジニアは何をするのか
by
gree_tech
KubeCon + CloudNativeCon Europe 2019 参加報告
by
Takashi Natsume
運用に自動化を求めるのは間違っているだろうか
by
Masahito Zembutsu
DevAx::connect はじめました
by
政雄 金森
GitLab Auto DevOps with Container CI/CD
by
Shingo Kitayama
クラウドを最大限活用するinfrastructure as codeを考えよう
by
NTT Communications Technology Development
Hadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjp
by
Yahoo!デベロッパーネットワーク
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
by
Masaya Aoyama
PayPayでのk8s活用事例
by
PayPay Corporation
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
by
Kazumi OHIRA
俺のTerraform CI/CD ライフサイクル
by
HonMarkHunt
Kube con + cloudnativecon 2017 社内報告会(外部公開用)
by
Masaya Aoyama
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に投 げているのかという分類)は読む時間がなかったので、いつか時間があったら再度まとめてみようか と思っています。 まとめ
Editor's Notes
#21
リソース Application/Project API Server Application Controler Repository Server 概念 Live State Target State プロセス Sync Refresh
#37
ApplicationServiceServerのinterface .Sync{} はinterface としてだけpbファイルに定義されており、実態はユーザが実装する それがapplication.goにある これはregisterで登録している(がっつりGRPCの話でよくわからん)
#38
ApplicationSyncRequest の中に様々な
#40
途中のいらなさそうなものはバッサリカット https://github.com/argoproj/argo-cd/blob/6262a8c750b27b254c330f9882ff26af7aac672c/util/argo/argo.go#L458 で a.Status.OperationState = nil してたりしてる
#41
ApplicationSyncRequest の中に様々な
#42
ApplicationSyncRequest の中に様々な
#43
ApplicationSyncRequest の中に様々な
#44
ApplicationSyncRequest の中に様々な
#48
・そしてその「スモールビジネスを、世界の主役に。」 ・スモールビジネスを「世界の」つまり「世の中の」主役するという使命の元ビジネスを続けてきた ・今それは願いから確信へと変わりつつある 【次項】創業時の想い ----- 改めて、「スモールビジネスを、世界の主役に。」こちらがfreee のミッションです。 私たちは、スモールビジネスを「世界の」つまり「世の中の」主役するという使命を掲げて走り続けてきました。 そして今、それは願いから確信へと変わりつつあります。
Download