Argo CD APP + Nginx "Hello World" ¶
1. gitea 中创建 Kustomize 应用 ¶
Argo CD 支持使用 Helm 进行应用编排,Helm 是一个用于 Kubernetes 的包管理器,可以方便地创建、配置和管理 Kubernetes 应用程序。Argo CD 会根据 Chart.yaml 文件中 apiVersion 的值来判断使用 Helm 2 还是 Helm 3,默认使用 Helm 3。
这是 Kubernetes 原生的应用编排方式,通过声明式定义包含不同种类 API 资源对象的 YAML 编排文件来管理应用,Argo CD 会将这些分散的资源收敛在一起进行管理。
https://argo-cd.readthedocs.io/en/stable/user-guide/kustomize/
1. gitea 仓库配置 ¶
Git 仓库中创建以下包含 ConfigMap、Deployment 和 Service 配置的文件结构,适配你的 Argo CD 应用定义。
![]() |
---|
1. 基础模板文件结构 ¶
创建一个简单的 kustomize 用于部署 Nginx:
mkdir kustomize && cd kustomize/
mkdir base && cd base/
1. deployment.yaml ¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
2. service.yaml ¶
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
type: ClusterIP
selector:
app: myapp
ports:
- port: 80
targetPort: 80
3. kustomization.yaml ¶
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
2. kustomize 构建 ¶
安装 kustomize
wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.3.0/kustomize_v5.3.0_linux_amd64.tar.gz
tar -zxvf kustomize_v5.3.0_linux_amd64.tar.gz
chmod +x kustomize
sudo mv kustomize /usr/local/bin/
构建 kustomize 资源
kustomize build .
3. 创建不同环境 ¶
1. 创建测试环境 ¶
mkdir overlays && cd overlays/
mkdir test && cd test
env.yaml ¶
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: myapp
env:
- name: ENV_NAME
value: test
kustomization.yaml ¶
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: env.yaml
查看结构
> tree kustomize/
kustomize/
├── base
│ ├── deployment.yaml
│ ├── kustomization.yaml
│ └── service.yaml
└── overlays
└── test
├── env.yaml
└── kustomization.yaml
2. 将 Chart 推送到 Git 仓库 ¶
git add .
git commit -m "Add kustomize for Argo CD"
git push origin main
2. 创建 Argo CD Application ¶
1. Application 资源 yaml 创建 ¶
cat helm-argocd-nginx.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kustomize-app # 应用在 Argo CD 中的名称
namespace: argocd # Argo CD 自身的命名空间(固定)
labels:
env: dev
spec:
project: default # 所属的 Argo CD Project(权限隔离单元)
source:
repoURL: 'https://gitea.gitops.linuxcdn.com:60000/argocd-test/gitea-argocd-kustomize-nginx.git' #地址
path: kustomize/overlays/test # Git 仓库中存放 K8s 配置文件的目录
targetRevision: HEAD # 指定使用 main 分支
destination:
namespace: test # 应用将部署到的目标命名空间
server: 'https://kubernetes.default.svc' # 目标集群 API 服务器地址(当前集群)
syncPolicy: # 同步策略
automated:
prune: false # 关闭自动删除(Git 中删除资源时,不自动清理集群)
selfHeal: false # 关闭自动修复(允许手动修改集群配置,不强制与 Git 同步)
syncOptions:
- CreateNamespace=true
kubectl apply -f helm-argocd-nginx.yaml
3. argocd 效果查看 ¶
1. ui 查看资源 ¶
查看 |
---|
![]() |
2. 访问 svc ¶
[root@k8s-m1 test]# curl 10.233.44.114
Hello from Argo CD and Nginx!
注意 namespace ¶
spec.destination.namespace
仅当 Kustomize
生成的清单中缺少命名空间时,该字段才会添加该命名空间。它还用于 kubectl 设置命名空间,这有时会丢失某些资源(例如自定义资源)中的命名空间字段。在这些情况下,您可能会收到如下错误:ClusterRoleBinding.rbac.authorization.k8s.io "example" is invalid: subjects[0].namespace: Required value.
直接使用 Kustomize 设置缺失的命名空间可以解决此问题。Settingspec.source.kustomize.namespace指示 Kustomize 将命名空间字段设置为给定值。
如果spec.destination.namespace和spec.source.kustomize.namespace都设置了,Argo CD 将遵循后者,即 Kustomize 设置的命名空间值。