推荐gitlab创建空仓库后,拉取到本地编辑好以后再提交,不要直接编辑gitlab的yaml文件,因为gitlab在线编辑时,换行与tab空格在argocd上可能存在识别失败,不是标准的yaml文件,无法创建应用。 创建一个最简单的仓库,仅包含应用的yaml文件,文件内容如下
[root@k8s-master test-git]# tree test/
test/
├── manifests
│ └── test.yaml
└── README.md
1 directory, 2 files
[root@k8s-master test-git]# cat test/manifests/test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
type: ClusterIP
selector:
app: myapp
ports:
- port: 80
targetPort: 80
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: myapp
namespace: default
spec:
entryPoints:
- web
routes:
- match: Host(`myapp.test.com`)
kind: Rule
services:
- name: myapp
port: 80
gitlab仓库内容如下:
添加仓库地址,Settings → Repositories,点击 Connect Repo using HTTPS 按钮:
填写以下信息
验证通过后显示如下,点击创建应用
填写以下内容
创建完后如下所示:
查看k8s创建的资源信息,发现已经成功创建了对应的资源
[root@k8s-master test-git]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-68c8648d6d-54brv 1/1 Running 0 62s
[root@k8s-master test-git]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp ClusterIP 10.97.189.71 <none> 80/TCP 70s
[root@k8s-master test-git]# kubectl get ingressroute
NAME AGE
myapp 78s
访问web页面验证
接下来模拟配置变更,将镜像版本从v1改为v2
查看argocd信息,发现已经自动同步了yaml文件,并且正在进行发布
访问web页面状态,发现已经完成了发布工作。
此时整个应用关联关系如下
点击history and rollback即可看到整个应用的所有发布记录,并且可以选择指定版本进行回退操作。
再次访问发现已经回退到v1版本