k8s-Argo CD实践
# 一、概述
前面我们介绍了Argocd部署以及官方提供的demo进行部署验证,当然如果只是简单的测试下功能,官方的demo基本也够用了,对于企业使用,我们的架构往往都比较复杂,我一直坚持一个观点就是,没有最好的架构只有最适宜的架构。
接下来,我会着重介绍下针对我们企业生产中,应用的部署演示。
# 二、清单文件准备
git仓库这里我们使用的是阿里的云效,与gitlab操作基本是一致的,也没有其他配置,只是为了存储应用的清单文件。
# 2.1 应用deploy定义
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: dev
name: auto-toc
labels:
app: auto-toc
spec:
revisionHistoryLimit: 10
replicas: 1
selector:
matchLabels:
app: auto-toc
template:
metadata:
labels:
team: tfgol-pos
app: auto-toc
version: "v1"
spec:
imagePullSecrets:
- name: tfgol-credentials
containers:
- name: auto-toc
image: registry.cn-hangzhou.aliyuncs.com/tfgol-dev/auto-toc:dev
imagePullPolicy: Always
resources:
limits:
memory: 1024Mi
requests:
memory: 512Mi
livenessProbe:
tcpSocket:
port: 9201
initialDelaySeconds: 10
timeoutSeconds: 3
periodSeconds: 10
successThreshold: 1
failureThreshold: 5
startupProbe:
tcpSocket:
port: 9201
initialDelaySeconds: 25
timeoutSeconds: 3
periodSeconds: 10
successThreshold: 1
failureThreshold: 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 2.2 提交至云效仓库
# 三、仓库认证
对于企业中,我们使用的仓库大多都是需要进行认证才可以进行clone
操作,因此这里需要先进行仓库认证,方便后续部署操作,生产实践中建议使用ssh协议,这样如果有多个仓库地址,不用再每一个都配置。
# 3.1 登录后台
# 3.2 参数配置
# 3.3 仓库状态
# 四、应用创建
应用这里我们直接使用CLI方式,也可以通过web页面,这里演示的是通过directory
方式创建应用,更多的使用方式,可以看下官方相关文档。
# 4.1 登录
[root@k8s-master01 ~]# argocd login argocd.tchua.com
1
2
2
# 4.2 创建应用
[root@k8s-master01 ~]# argocd app create auto-toc \
--repo https://codeup.aliyun.com/6475960f71f685caf08197cd/shanghai_moji/tfgol-app-deploy.git \
--path auto-toc \
--dest-server https://kubernetes.default.svc \
--dest-namespace dev
1
2
3
4
5
2
3
4
5
# 4.3 应用部署
[root@k8s-master01 ~]# argocd app sync auto-toc
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2023-06-06T15:17:45+08:00 apps Deployment dev auto-toc OutOfSync Missing
2023-06-06T15:17:45+08:00 apps Deployment dev auto-toc OutOfSync Missing deployment.apps/auto-toc created
2023-06-06T15:17:45+08:00 apps Deployment dev auto-toc Synced Progressing deployment.apps/auto-toc created
Name: argocd/auto-toc
Project: default
Server: https://kubernetes.default.svc
Namespace: dev
URL: https://argocd.tchua.com/applications/auto-toc
Repo: https://codeup.aliyun.com/6475960f71f685caf08197cd/shanghai_moji/tfgol-app-deploy.git
Target:
Path: auto-toc
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: Synced to (2a9b19a)
Health Status: Progressing
Operation: Sync
Sync Revision: 2a9b19ad96c2036026fc373a8b5da55b77fa6ccd
Phase: Succeeded
Start: 2023-06-06 15:17:44 +0800 CST
Finished: 2023-06-06 15:17:45 +0800 CST
Duration: 1s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
apps Deployment dev auto-toc Synced Progressing deployment.apps/auto-toc created
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 4.4 查看应用状态
# 4.5 Web UI查看应用
# 4.6 更新应用
更新应用,只需要把修改后的配置清单,提交至git仓库,然后触发同步,即可完成应用的更新,这里把应用副本数由1个修改为2个
- 修改yaml文件副本数
replicas: 2
1
- 提交修改
git add .
git commit -m "toc 副本修改"
git push -u origin master
1
2
3
2
3
- 登录Web UI查看应用状态
我们知道Argo CD会定时(3min)对比git仓库与本地的清单文件,如果由改变应用状态会显示OutOfSync
,如果想要立即生效,则需要点击应用下面的REFRESH
按钮进行刷新。
- 手动触发更新
[root@k8s-master01 ~]# argocd app sync auto-toc
1
- 查看资源
可以看到已经在部署
注意
通过上面操作我们可以看到,每次创建应用后,都需要我们手动触发应用部署才可以,这是因为我们配置的更新策略为手动,如果想要自动触发只应用部署,则可以在创建应用时,添加--sync-policy
参数,指定对应的策略,例如:
[root@k8s-master01 ~]# argocd app create guestbook \
--repo https://github.com/argoproj/argocd-example-apps.git \
--path guestbook \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--sync-policy automated
1
2
3
4
5
6
2
3
4
5
6
另外,如果我们配置的策略为automated
,则需要关注下,下面两个参数:
- PRUNE RESOURCES(--auto-prune):指的是在集群上某个资源在 Git仓库中 找不到对应的配置时,则自动删除集群上的该资源
- SELF HEAL(--self-heal): 自愈,指当集群上资源的实时状态与 Git仓库定义的配置不匹配时,自动将实际状态与 GitRepo 的期望状态同步。例如,GitRepo 中定义 pod 的数量为2,你在集群上改为了 1 个 pod,如果你不勾选 self heal。则 ArgoCD 则不会在同步(对一次提交只同步一次),这时 pod 的数量就一直为 1。但你如果勾选了 self heal,ArgoCD 就会轮询去同步,将你的 pod 改为你 GitRepo 里的期望数量
如果应用启用了自动同步那么该Application
就不 支持 RollBack
操作
编辑 (opens new window)
上次更新: 2024/01/02, 18:20:30