跳转至

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 应用定义。

image-20250731150422438

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 查看资源

查看
image-20250731161043013

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 设置的命名空间值。