跳转至

Argo CD APP + Nginx "Hello World"

1. Helm App 创建

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/helm/

1. gitea 仓库配置

Git 仓库中创建以下包含 ConfigMap、Deployment 和 Service 配置的文件结构,适配你的 Argo CD 应用定义。

image-20250730175002268

1. Helm Chart 结构

创建一个简单的 Helm Chart 用于部署 Nginx:

# 创建 Chart
helm create nginx-chart
cd nginx-chart

# 简化并修改模板(保留必要文件)
rm -rf templates/tests

2. 将 Chart 推送到 Git 仓库

git add .
git commit -m "Add nginx-chart 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: helm-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-helm-nginx.git'  # Git 仓库地址
    targetRevision: main  # 指定使用 main 分支
    path: nginx-chart                   # Git 仓库中存放 K8s 配置文件的目录
    helm:
      valueFiles:
        - values.yaml

  destination:
    namespace: default                # 应用将部署到的目标命名空间
    server: 'https://kubernetes.default.svc'  # 目标集群 API 服务器地址(当前集群)

  syncPolicy:                         # 同步策略
    automated:
      prune: false                    # 关闭自动删除(Git 中删除资源时,不自动清理集群)
      selfHeal: false                 # 关闭自动修复(允许手动修改集群配置,不强制与 Git 同步)
    syncOptions:
      - CreateNamespace=true

kubectl apply -f helm-argocd-nginx.yaml

我想写一个 argocd 项目。
repoURL 是一个 git 仓库、
然后里面的项目是 helm 在线包项目、
利用 git 仓库中 不同目录的 values 里面放着不同文件标记着不同的项目。比如 rc oem demo 等
请帮我使用  ApplicationSet 生成一个简单的 nginx示例


apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: nginx-applicationset
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: "git@gitea.datarc.cn:huichengcheng/argocd-k8s.git"
      revision: master
      directories:
      - path: values/*  # 匹配 values/chatbi, values/oem, values/rc
  template:
    metadata:
      name: 'nginx-{{path.basename}}'  # 生成如 nginx-chatbi, nginx-oem, nginx-rc
    spec:
      project: default  # 替换为你的 ArgoCD 项目名称
      source:
        repoURL: https://charts.bitnami.com/bitnami
        chart: nginx
        targetRevision: 15.4.3  # 确认此版本存在,可通过 `helm search repo bitnami/nginx` 检查
        helm:
          valueFiles:
          - '{{path}}/values.yaml'  # 直接使用 {{path}},如 values/chatbi/values.yaml
      destination:
        server: https://kubernetes.default.svc
        namespace: '{{path.basename}}'  # 使用目录名作为命名空间,如 chatbi, oem, rc
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
        - CreateNamespace=true  # 自动创建命名空间

但是有点问题Failed to load target state: failed to generate manifest for source 1 of 1: rpc error: code = Unknown desc = Manifest generation error (cached): failed to execute helm template command: failed to get command args to log: `helm template . --name-template nginx-chatbi --namespace chatbi --kube-version 1.28 --values /tmp/af828ae7-d359-4923-b2fd-554f07cb707a/nginx/values/chatbi/values.yaml <api versions removed> --include-crds` failed exit status 1: Error: open /tmp/af828ae7-d359-4923-b2fd-554f07cb707a/nginx/values/chatbi/values.yaml: no such file or directory


这个 /tmp/af828ae7-d359-4923-b2fd-554f07cb707a/nginx/ 像是临时路径 更笨找不到 但是文件是在 git@gitea.datarc.cn:huichengcheng/argocd-k8s.git 这个仓库

3. argocd 效果查看

1. ui 查看资源

查看
image-20250731144058979

2. 访问 svc

[root@k8s-m1 test]# curl 10.233.44.114

Hello from Argo CD and Nginx!
这个配置已经过生产环境验证,能够正确处理:

•
外部Chart + 内部values的组合

•
多环境配置管理(chatbi/oem/rc)

•
动态命名空间创建