Skip to content

定制工具

Argo CD 捆绑了其支持的模板工具(helm、kustomize、ks、jsonnet)的首选版本,作为其容器镜像的一部分。 有时,可能需要使用 Argo CD 捆绑的工具之外的特定版本。 这样做的一些原因可能是:

  • 升级/降级到某个工具的特定版本,因为存在错误或修复了错误。
  • 安装额外的依赖项,以便被 kustomize 的 configmaps 和 secrets 生成器引用。(例如:curl、vault、gpg、AWS CLI)
  • 安装[配置管理插件](config-management-plugins.md)。

由于 Argo CD 版本库服务器是负责生成 Kubernetes 配置清单的单一服务,因此可以对其进行定制,以使用环境所需的其他工具链。

通过卷挂载添加工具

第一种技术是使用一个 "init "容器和一个 "volumeMount "将不同版本的工具复制到 repo-server 容器中。 在下面的示例中,init 容器正在用与 Argo CD 中捆绑的版本不同的二进制文件覆盖 helm:

spec:
      # 1. Define an emptyDir volume which will hold the custom binaries
      volumes:
      - name: custom-tools
        emptyDir: {}
      # 2. Use an init container to download/copy custom binaries into the emptyDir
      initContainers:
      - name: download-tools
        image: alpine:3.8
        command: [sh, -c]
        args:
        - wget -qO- https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz | tar -xvzf - &&
          mv linux-amd64/helm /custom-tools/
        volumeMounts:
        - mountPath: /custom-tools
          name: custom-tools
      # 3. Volume mount the custom binary to the bin directory (overriding the existing version)
      containers:
      - name: argocd-repo-server
        volumeMounts:
        - mountPath: /usr/local/bin/helm
          name: custom-tools
          subPath: helm

BYOI(打造自己的镜像)

有时,仅替换二进制文件是不够的,还需要安装其他依赖项。 下面的示例从 Docker 文件构建了一个完全定制的版本服务器,安装了生成配置清单可能需要的额外依赖项。

FROM argoproj/argocd:v2.5.4 # Replace tag with the appropriate argo version

# Switch to root for the ability to perform install
USER root

# Install tools needed for your repo-server to retrieve & decrypt secrets, render manifests 
# (e.g. curl, awscli, gpg, sops)
RUN apt-get update && \
    apt-get install -y \
        curl \
        awscli \
        gpg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
    curl -o /usr/local/bin/sops -L https://github.com/mozilla/sops/releases/download/3.2.0/sops-3.2.0.linux && \
    chmod +x /usr/local/bin/sops

# Switch back to non-root user
USER $ARGOCD_USER_ID