创建应用
在仓库 https://gitee.com/zouzou_busy/devops_test 里有个 app 目录,里面有个 myapp-deployment.yaml 文件 和 myapp-service.yaml 文件,用来演示我们 argo cd 的功能
myapp-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 2 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - image: zouzou0214/myapp:v1 name: myapp ports: - containerPort: 8008
myapp-service.yaml
apiVersion: v1 kind: Service metadata: name: myapp spec: ports: - port: 8008 targetPort: 8008 type: NodePort selector: app: myapp
通过 CLI 来创建应用
[root@master1 ~]# argocd app create --help Create an application Usage: argocd app create APPNAME [flags] Examples: # Create a directory app argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --directory-recurse # Create a Jsonnet app argocd app create jsonnet-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path jsonnet-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --jsonnet-ext-str replicas=2 # Create a Helm app argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --helm-set replicaCount=2 # Create a Helm app from a Helm repo argocd app create nginx-ingress --repo https://charts.helm.sh/stable --helm-chart nginx-ingress --revision 1.24.3 --dest-namespace default --dest-server https://kubernetes.default.svc # Create a Kustomize app argocd app create kustomize-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path kustomize-guestbook --dest-namespace default --dest-server https://kubernetes.default.svc --kustomize-image gcr.io/heptio-images/ks-guestbook-demo:0.1 # Create a app using a custom tool: argocd app create kasane --repo https://github.com/argoproj/argocd-example-apps.git --path plugins/kasane --dest-namespace default --dest-server https://kubernetes.default.svc --config-management-plugin kasan Flags: ......
直接执行如下所示命令即可:
argocd app create app01 --repo https://gitee.com/zouzou_busy/devops_test.git --path app --dest-server https://kubernetes.default.svc --dest-namespace demo1 application 'app01' created
- app01:应用的名称
- --repo:仓库地址
- --path:仓库里存放资源的路径,我这里的是在 app 目录下
- --dest-server:部署到的服务器地址
- --dest-namespace:部署的命名空间地址,我这里为 demo1
部署成功后就可以在页面上查看到了
通过 UI 创建应用
除了上面使用命令行创建之外,我们还可以使用 ui 进行创建
登录 ui 后,点击 +NEW APP 创建应用,如下
将应用命名为 app02,使用 default project,并将同步策略设置为 Manual。如下
SYNC POLICY
如果选择的是 Automatic
后,会有两个选项,如下
RRUNE RESOURCES
:自动修剪。集群上某个资源在 GitRepo 中找不到对应的配置时,自动删除集群上的该资源
SELF HEAL
:自愈。因各种原因(如手动修改)集群上资源的实时状态而导致与 GitRepo 不匹配时,自动将实际状态与 GitRepo 的期望状态同步。例如,GitRepo 中定义 pod 的数量为2,你在集群上改为了 3 个 pod,如果你不勾选 self heal。则 ArgoCD 则不会在同步(对一次提交只同步一次),这时 pod 的数量就一直为 3。但你如果勾选了 self heal,ArgoCD 就会轮询去同步,将你的 pod 改为你 GitRepo 里的数量
自动同步仅发生在应用处于 OutOfSync 状态时,ArgoCD 并不会对处于 Synced 或 Error 状态的 Application 执行自动同步
对于 GitRepo 上的一次提交,自动同步仅会执行一次,除非同时启用 Self Heal 机制
启用了自动同步的 Application 不支持 RollBack
SYNC OPTIONS(同步策略)
SKIP SCHEMA VALIDATION
:是否执行资源规范格式的校验,相当于 ”kubectl apply --validate={true|false}“,默认为 trueAUTO-CREATE NAMESPACE
:自动创建命名空间。如果部署的应用没有命名空间,则自动创建PRUNE LAST
:在同步操作的最后在执行修剪操作,即其他资源已经部署且转为健康状态后在进行 pruneAPPLY OUT OF SYNC ONLY
:仅对那些处于OutOfSync
状态的资源执行同步操作。一个path
下可能有多个资源,有些是synced
的,有些是OutOfSync
的,勾选上之后,只对 OutOfSync 的资源做同步REPLACE
:将使用 kubectl replace/create 命令同步资源,而非默认的 applyPRUNE PROPAGATION POLICY
:资源修剪传播策略,默认值使用 foreground 策略,还有 background 和 orphanRESPECT IGNORE DIFFERENCES
:在同步阶段忽略期望状态的字段。例如我们有个 deployment,里面的 replicas 为 20。代表我们期望的 pod 数量为 20 个,但如果我们进行灰度发布的时候,可能多,也可能少。这个时候,如果不勾选RESPECT IGNORE DIFFERENCES
,就会导致灰度发布出现问题,所以这时候我们最好是勾选上该参数
然后在下面配置 Repository URL
为 https://gitee.com/zouzou_busy/devops_test.git,将 Revision 设置为 HEAD,并将路径设置为 app。然后下面的 Destination 部分,将 cluster 设置为 inCluster
和 namespace 为 demo2
SOURCE
- Repository URL:git 仓库的 URL 地址
- Revision:要使用的 Revision,通常是指源码库上的 branch、tag、commit 或 helm chart 版本
- Path:git 仓库中含有配置文件的子目录路径
DESTINATION
- CLuster URL:部署的目标集群
- Namespace:部署的目标集群的 namespace 下
Directory:这里还可以选择 helm、Kustomize、Plugin 等。下面以 directory 为例
- DIRECTORY RECURSE:对目录进行递归
对应的 yaml 可以点击右上角 EDIT AS YAML 查看
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app02 spec: destination: name: '' namespace: demo2 server: 'https://kubernetes.default.svc' source: path: app repoURL: 'https://gitee.com/zouzou_busy/devops_test.git' targetRevision: HEAD project: default syncPolicy: automated: null syncOptions: - CreateNamespace=true
填写完以上信息后,点击页面左上方的 Create 安装,即可创建 app02 应用,创建完成后可以看到当前应用的处于 OutOfSync
状态:
Argo CD 默认情况下每 3 分钟会检测 Git 仓库一次,用于判断应用实际状态是否和 Git 中声明的期望状态一致,如果不一致,状态就转换为 OutOfSync
。默认情况下并不会触发更新,除非通过 syncPolicy
配置了自动同步
通过 CRD 创建
除了可以通过 CLI 和 Dashboard 可以创建 Application 之外,其实也可以直接通过声明一个 Application
的资源对象来创建一个应用,如下所示
创建一个 argocd-app03.yaml 文件,内容如下
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app03 # 名称为 app03 spec: destination: name: '' namespace: demo3 # 命名空间为 demo3 server: 'https://kubernetes.default.svc' source: path: app repoURL: 'https://gitee.com/zouzou_busy/devops_test.git' targetRevision: HEAD project: default syncPolicy: automated: null syncOptions: - CreateNamespace=true