1.3 Application管理
先导入一个测试的repo在本地gitlab(gitlab.icloud2native.com),方便测试。
1.3.1 创建application
- 通过argocd cli创建application
通过argocd 的命令行可以创建application
argocd app create guestbook --repo http://code.gitlab.svc.cluster.local/root/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
从argocd WEB UI上查看是否创建成功:
命令行同样可以看到:
argocd app list
- 通过argocd web创建application
点击创建
因为我们同步策略为auto,所以当修改配置文件,理论上会自动同步部署新版本,将image版本改为0.8.1
3.3.2 自动同步策略
- 自动同步策略允许ArgoCD在检测到GitRepo与实际状态之间存在差异时自动启动同步策略操作
- Prune Resource(自动修剪):集群上某个资源在GitRepo中找不到对应的的配置时,自动删除集群上的该资源;
- Self Heal(自愈):因各种原因(如手动修改)集群上的实时状态而导致与GitRepo不匹配时,自动将实际状态与GitRepo的期望状态同步;
- 注意事项
- 自动同步仅发生在applicatin处于OutOfSync状态时,ArgoCD并不会对处于synced或Error状态的Application执行自动同步;
- 对于GitRepo上的一次提交,自动同步仅会执行一次,除非同时启用Self Heal机制;
- 启用了自动同步的application不支持rollbacck
3.3.3 同步选项
-
同步选项(Sync Options)用于禁用或启用同步过程中的某些特性
-
ApplyOutSyncOnly
仅对那些处于OutOfSync状态的资源执行同步操作;
-
PrunePropagationPolicy
资源修剪传播策略,默认使用foreground策略,另外可选的策略还有backgroud和orphan
-
PruneLast
在同步操作的最后在执行修剪操作,即其他资源已经部署且转为健康状态后,进行修剪
-
Replace
对资源的修改以replace方式进行,而非默认的apply
-
FailOnSharedResource
默认的同步策略操作不会考虑GitRepo中定义的资源是否已经被其他Application所使用,将该选项设置为true,意味在发现资源已经被其他Application所使用时,将同步状态设置为fail
-
RespectIgnoreDifferences
在同步阶段忽略期望状态的某些字段
-
CreateNamespaces
创建缺失的名称空间
-
Validation
是否执行资源规范格式的校验,相当于"kubectl apply --validate={true|false}",默认为true
-
3.3.4 使用argocd CLI管理Application
-
管理Application的命令为"argocd app"
-
子命令
- 基础命令:create、delete、edit、get、list
- 日常管理命令:diff、logs、sync、rollback、history、terminate-op
- 其他管理命令:manifests、delete-resource、patch、patch-resource、unset、wait
-
向ArgoCD上添加Application
- argocd app create APPNAME [flags]
- 常用的flags
- –repo string: Git Repository URL
- –path string: Git Repository中含有配置文件的子目录路径
- –directory-recurse:对目录进行递归
- –revision srting :要使用的revision,通常指branch、tag、commit
- -f --file string:部署application用到的额配置文件,优先级高于–repo --path
- –release-name string: 部署为Helm Charts时,为其指定的release名称
- –project string:隶属的Project,默认为default
- –dest-server string : 目标kubernetes集群的URL(API Server的URL)
- –dest-namespace string: 目标名称空间
-
Application示例
-
手动执行sync
argocd app sync <appname>
-
设定同步策略
启用自动同步:
argocd app set <APPNAME> --sync-policy automated
自动修剪:
argocd app set <APPname> --auto-prune
启动自我修复:
argocd app set <APPNAME> --self-heal
-
设定同步选项
禁止修剪特定的资源,可以子啊特定资源的yaml文件下面添加如下:
metadata: annotations: argocd.argoproj.io/sync-options: Prune=false
禁用kubectl验证,可以在特定的资源的yaml文件下面添加如下:
metadata: annotations: argocd.argoproj.io/sync-options: Validate=false
有选择性的执行同步(二选一):
1、命令:
argocd app set <APPNAME> --sync-option ApplyOutOfSyncOnly={true|false}
2、配置文件定义:
apiVersion: argoproj.io/v1alpha1 kind: Application spec: syncPolicy: syncOptions: - ApplyOutOfSyncOnly=true
资源修剪传播策略
命令:
argocd app set <APPNAME> --sync-option PrunePropagationPolicy={foreground|background|orphan}
是否同步完在进行修剪:
命令:
argocd app set <APPNAME> --sync-option PruneLast={true|false}
是否replace而非apply
argocd app set <APPNAME> --sync-option Replace={true|false}
若存在共享资源,是否将同步置为Fail
argocd app set <APPNAME> --sync-option FailOnSharedResource={true|false}
是否忽略差异
argocd app set <APPNAME> --sync-option RespectIgnoreDifferences={true|false}
是否自动创建名称空间
argocd app set <APPNAME> --sync-option CreateNamespace={true|false}
-
3.3.5 管理Git Repo
-
命令行添加repo
-
argocd repo add REPOURL [flags]
-
常用选项
◆–name string:当前Repo的名称
◆–ssh-private-key-path string:用于访问Git Repo的SSH私钥文件路径
◆–insecure-ignore-host-key:不校验host key
◆–insecure-skip-server-verification:不校验host key和server certificate
◆–username string:用户名
◆–password string:密码
◆–project string:Repo所属的Project
◆–type string:Repo的类型
-
-
argocd web ui 添加
3.3.6 管理Cluster
-
添加cluster
-
argocd cluster add CONTEXT [flags]
-
常用选项
◆–name string:Cluster的标识
◆--in-cluster:ArgoCD自身运行在的Kubernetes集群,访问地址为https://kubernetes.default.svc;
◆–kubeconfig string:使用指定的kubeconfig文件
◆–namespace stringArray:目标名称空间
◆–project string:所属的Project
◆–service-account string:使用的ServiceAccount
-
其它命令
-
get
-
list
-
rm
-
rotate-auth