Más contenido relacionado
La actualidad más candente (20)
Similar a Argo CD Deep Dive (7)
Argo CD Deep Dive
- 3. 01 はじめに
02 Argo CDとArgo Family
03 コンセプト
04 アーキテクチャ詳解
05 Syncしたときの挙動をコ
ードベースで追ってみる
Agenda
- 4. 01 はじめに
02 Argo CDとArgo Family
03 コンセプト
04 アーキテクチャ詳解
05 Syncしたときの挙動をコ
ードベースで追ってみる
Agenda
- 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
○ さわりだけ話すけどほぼ話さない
- 9. 01 はじめに
02 Argo CDとそのコンセプト
03 Argo Familiy
04 アーキテクチャ詳解
05 Syncしたときの挙動をコ
ードベースで追ってみる
Agenda
- 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に所属されうる
- 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
- 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
- 21. 01 はじめに
02 Argo CDとそのコンセプト
03 Argo Familiy
04 アーキテクチャ詳解
05 Syncしたときの挙動をコ
ードベースで追ってみる
Agenda
- 23. 01 はじめに
02 Argo CDとそのコンセプト
03 Argo Familiy
04 アーキテクチャ詳解
05 Syncしたときの挙動をコ
ードベースで追ってみる
Agenda
- 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
- 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
- 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実行
- 43. 44
● Application Controllerの挙動を話した
● application controllerは自発的にmonitorする
のでendpointをもっていない
○ コード上もないし、k get svcしても
application controllerが利用するserviceは
ない
● 今回の話はあくまでSync(すでにrefreshは行
われている想定)
● refreshは自動でn分に一回実行したり、
UI/CLIから明示的にrefreshしたりできる。
● Syncと似たようなQueueで管理されている
Sync時の動作をコードで追う
Notas del editor
- リソース
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 のミッションです。
私たちは、スモールビジネスを「世界の」つまり「世の中の」主役するという使命を掲げて走り続けてきました。
そして今、それは願いから確信へと変わりつつあります。