🐙
ArgoCDでApplicationをmanifestで管理する
目標
App Of Appsを適用して3つのApplicationをmanifestで管理する。
- app of apps
- apache
- nginx
App Of Appsとは
複数のApplicationを管理する親のApplicationを作成する構成です。
こちらの記事にメリデメがわかりやすくまとめられていました。
リポジトリ構成
リポジトリ構成
root
├ argocd
└ app-of-apps.yaml #親Application
├ httpd
└ httpd.yaml #リソース(Namespace/Deployment/Service)
├ installs
└ httpd.yaml #子Application
└ nginx.yaml #子Application
├ nginx
└ nginx.yaml #リソース Namespace/Deployment/Service
親Application
app-of-apps.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-of-apps
namespace: argocd
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: installs #子Applicationのmanifestがあるディレクトリを指定する
repoURL: https://github.com/xxx/argocd-sample-app.git
targetRevision: main
syncPolicy:
automated: {}
子Application
apache
httpd.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: httpd
spec:
destination:
namespace: defalut
server: https://kubernetes.default.svc
project: default
source:
path: httpd
repoURL: https://github.com/xxx/argocd-sample-app.git
targetRevision: main
syncPolicy:
automated: {}
nginx
nginx.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
destination:
namespace: defalut
server: https://kubernetes.default.svc
project: default
source:
path: nginx
repoURL: https://github.com/xxx/argocd-sample-app.git
targetRevision: main
syncPolicy:
automated: {}
リソース Namespace/Deployment/Service
apache
httpd.yaml
kind: Namespace
apiVersion: v1
metadata:
name: httpd
labels:
name: httpd
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd
namespace: httpd
spec:
replicas: 4
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: httpd
namespace: httpd
labels:
app: httpd
spec:
ports:
- port: 80
selector:
app: httpd
nginx
nginx.yaml
kind: Namespace
apiVersion: v1
metadata:
name: nginx
labels:
name: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: nginx
labels:
app: nginx-app
name: nginx
spec:
type: NodePort
ports:
- name: nginx-port
port: 80
targetPort: 80
protocol: TCP
selector:
app: nginx
デプロイ
親Applicationのapp-of-apps.yaml
をデプロイするだけでOKです。
>> argocd/
kubectl apply -f app-of-apps.yaml
アプリケーションがデプロイできました。
小アプリケーションのリソースが期待値通りか確認します。
apache
期待値通りです。
nginx
期待値通りです。
子Applicationを追加する場合の手順
- 子Applicationのディレクトリ作成&manifestファイル作成
-
/installs
に新規ファイル作成&Applicationを定義 - Githubリポジトリにpushする ※
spec.syncPolicy
をautomated
にしていれば自動でArgoCDがデプロイしてくれる
Discussion