我正试图在我的 Rancher kubernetes 集群中使用 Helmfile 插件设置 Argo CD 部署,并遵循此参考文档。但是,我遇到了找不到卷挂载的问题。以下是我的设置细节:
<代码
Deployment.yaml:
apiVersion: apps/v1
类型:部署
元数据:
名称: argocd-repo-server
命名空间: argocd
spec:
template:
spec:
容器:
- 名称: cmp-helmfile
securityContext:
runAsNonRoot: true
runAsUser: 999
image: ghcr.io/helmfile/helmfile:v0.157.0
imagePullPolicy:IfNotPresent
# 入口点应是 Argo CD 轻量级 CMP 服务器,即 argocd-cmp-server
命令:[/var/run/argocd/argocd-cmp-server] # 入口点应该是 Argo CD 轻量级 CMP 服务器,即 argocd-cmp-server 命令。
volumeMounts:
- mountPath:/var/run/argocd
名称: var-files
- mountPath:/home/argocd/cmp-server/plugins
名称: 插件
- mountPath:/home/argocd/cmp-server/config/plugin.yaml
subPath: plugin.yaml
名称: cmp-helmfile
- mountPath:/tmp
名称: cmp-tmp
卷:
- 名称: cmp-helmfile
configMap:
名称: cmp-helmfile
- emptyDir: {}
name: cmp-tmp
错误信息:
错误信息:
-
spec.template.spec.containers[0].volumeMounts[0].name: Not found: "var-files"
- spec.template.spec.containers[0].volumeMounts[1].name: 未找到: "plugins"
我不确定 /var/run/argocd 的来源。根据参考文档,它似乎应该由 Argo CD 提供,但我找不到它应该如何挂载的详细信息。 问题:
/var/run/argocd 挂载应来自何处,在部署中应如何定义?
如何解决 var 文件和插件卷未找到的错误?
如果能就这些问题提供任何指导,我们将不胜感激。谢谢!
遇到的错误是因为正尝试在
cmp-helmfile
容器中挂载不存在的卷“var-files”和“plugins”。 这些卷在 Argo CD 的上下文之外没有意义,并且在提供的配置中未定义。
以下是解决此问题的步骤以及对问题的解答:
1.
/var/run/argocd
挂载源
/var/run/argocd
挂载
不应
由提供。它是 Argo CD
repo-server
容器内部的目录,其中包含 Git 存储库的本地缓存以及其他 Argo CD 数据。正在尝试在
cmp-helmfile
容器中使用
argocd-cmp-server
,它应该作为 Argo CD
repo-server
内的插件
运行,而不是作为独立容器运行。
2. 如何修复错误
-
不要将
cmp-helmfile
作为单独的容器运行。 Argo CD 提供了一个机制来注册Config Management Plugins
,如cmp-helmfile
。应该在argocd-repo-server
部署中配置此插件,而不是创建单独的部署。 -
使用 Argo CD
Config Management Plugins
配置。-
需要一个
ConfigManagementPlugin
资源来注册cmp-helmfile
。这将告诉 Argo CD 在哪里可以找到插件,以及如何执行它。 -
在
ConfigManagementPlugin
资源中,将指定cmp-helmfile
容器镜像和命令。 -
不需要为
cmp-helmfile
创建任何显式卷挂载。插件将在argocd-repo-server
容器的上下文中运行,并可以访问argocd-repo-server
容器的所有文件和目录,包括/var/run/argocd
。
-
需要一个
3. 示例配置
以下是如何配置
cmp-helmfile
作为 Argo CD 中的 Config Management Plugin 的示例:
# cmp-helmfile-plugin.yaml
apiVersion: argoproj.io/v1alpha1
kind: ConfigManagementPlugin
metadata:
name: cmp-helmfile
spec:
generate:
command:
- sh
- -c
- |
helmfile --quiet -c $ARGOCD_APP_NAME/$ARGOCD_APP_NAMESPACE -f $ARGOCD_APP_SOURCE_PATH template --namespace $ARGOCD_APP_NAMESPACE > $ARGOCD_APPLICATION_MANIFEST
discover:
fileName: "helmfile.yaml"
init:
command:
- sh
- -c
- |
helmfile --quiet -c $ARGOCD_APP_NAME/$ARGOCD_APP_NAMESPACE -f $ARGOCD_APP_SOURCE_PATH deps
environment:
ARGOCD_APP_NAME: "{{.app.spec.source.repoURL}}"
ARGOCD_APP_NAMESPACE: "{{.app.spec.destination.namespace}}"
ARGOCD_APP_SOURCE_PATH: "{{.app.spec.source.path}}"
将此文件应用于的集群:
kubectl apply -f cmp-helmfile-plugin.yaml
通过这种配置,Argo CD 将使用
cmp-helmfile
插件来管理使用
helmfile.yaml
文件定义的应用程序。
其他说明:
-
确保的
argocd-repo-server
部署具有足够的资源(CPU 和内存)来处理cmp-helmfile
插件的执行。 -
检查 Argo CD 文档以获取有关
Config Management Plugins
的更多信息:https://argo-cd.readthedocs.io/en/stable/user-guide/cmp-server/