【问题标题】:Difference between pushing a docker image and installing helm image推送 docker 镜像和安装 helm 镜像的区别
【发布时间】:2022-11-09 23:44:45
【问题描述】:

我需要学习一个 CI 管道,其中有一个步骤是使用 Dockerfile 构建和推送图像,另一个步骤是创建 helm chart 图像,其中定义了 docker 文件创建的图像。之后,有一个 CD 管道,其中安装了仅由 helm chart 创建的内容。

由 Dockerfile 直接创建的镜像和由 helm chart 创建的镜像有什么区别?为什么 Docker 镜像还不够?

【问题讨论】:

  • 不确定我是否理解这个问题。 Helm 是一个包管理器,它使用 Docker 镜像作为图表的一部分。
  • Helm 图表具有 Kubernetes 的配置,它使用从 Dockerfile 构建的 Docker 映像。
  • @Maroun,但最终您使用的是 docker 映像,那么 helm 图表为您提供了 docker 文件本身和映像所没有的什么?
  • 您不能直接将映像“部署”到 Kubernetes。您需要使用 Kubernetes 资源(ReplicaSets、Services ...)这就是 Helm 的用途,以管理(版本、安装、升级、删除...)Kubernetes 应用程序。
  • @YonatanNir 例如,考虑将 DataDog 代理安装到您的 K8s 集群。如果您想自己管理,则需要手动创建和配置许多资源:daemonsets、serviceaccount、clusterrole、clusterrolebinding、secrets,可能还有更多资源。使用像 Helm 这样的包管理器,可以为您完成所有工作。但最终,一些资源将需要运行容器 - 您在图表中提供图像。

标签: docker dockerfile kubernetes-helm


【解决方案1】:

努力的程度

要使用 docker 镜像在 Kubernetes 上部署服务,您需要手动创建各种配置文件,例如 deployment.yaml。随着越来越多的服务添加到您的环境中,此类文件会不断增加。

在 Helm 图表中,我们可以在 requirements.yaml 文件中提供我们希望部署的所有服务的列表,Helm 将确保使用 deployment.yamlservice.yamlvalues.yaml 文件将所有这些服务部署到目标环境.

要维护的配置

此外,添加路由、配置映射、机密等配置也需要手动添加,并且需要在您的服务部署之上进行配置。

例如,如果您想在您的环境中添加一个 Nginx 代理,您需要使用 Nginx 镜像和您的功能服务的所有代理配置单独部署它。

但是对于 Helm 图表,这可以通过在 Helm 图表中仅配置一个文件来实现:ingress.yaml

灵活性

使用 docker 镜像,我们需要为要部署服务的每个环境提供配置。

但是使用 Helm 图表,我们可以使用特定于环境的 values.yaml 文件覆盖现有 helm 图表的属性。使用ArgoCD 之类的工具变得更加容易。

代码片段:

下面是deployment.yaml 文件的一个示例,如果我们想使用 docker-image 部署一项服务,我们需要创建该文件。

内联,我还描述了如何使用 requirements.yamlValues.yaml 等不同文件在 Helm 存储库中填充通用 deployment.yaml 模板

deployment.yaml 用于一项服务

crazy-project/charts/accounts/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: accounts
spec:
  replicas: 1
  selector:
     matchLabels:
       app.kubernetes.io/name: accounts
       app.kubernetes.io/instance: crazy-project
  template:
     metadata:
       labels:
         app.kubernetes.io/name: accounts
         app.kubernetes.io/instance: crazy-project
     spec:
       serviceAccountName: default
       automountServiceAccountToken: true
       imagePullSecrets:
         - name: regcred
       containers:
       - image: "image.registry.host/.../accounts:1.2144.0"   <-- This version can be fetched from 'requirements.yaml'
         name: accounts
         env:      <-- All the environment variables can be fetched from 'Values.yaml'
         - name: CLUSTERNAME
           value: "com.company.cloud"
         - name: DB_URI
           value: "mongodb://connection-string&replicaSet=rs1"
         imagePullPolicy: IfNotPresent
         volumeMounts:
         - name: secretfiles
           mountPath: "/etc/secretFromfiles"
           readOnly: true
         - name: secret-files
           mountPath: "/etc/secretFromfiles"
           readOnly: true
         ports:
         - name: HTTP
           containerPort: 9586
           protocol: TCP
         resources:
           requests:
             memory: 450Mi
             cpu: 250m
           limits:
             memory: 800Mi
             cpu: 1
       volumes:
       - name: secretFromfiles
         secret:
           secretName: secret-from-files
       - name: secretFromValue
         secret:
           secretName: secret-data-vault
           optional: true
           items:...

您在 Helm 图表中的 deployment.yaml 可能是一个通用模板(下面的代码-sn-p),其中使用 values.yaml 文件填充详细信息。

env:
{{- range $key, $value := .Values.global.envVariable.common }}
    - name: {{ $key }}
      value: {{ $value  | quote }}
    {{- end }}

你的 Values.yaml 看起来像这样:

accounts:
  imagePullSecrets:
    - name: regcred
  envVariable:
    service:
      vars:
        spring_data_mongodb_database: accounts_db
        spring_product_name: crazy-project
        ...

您的 requirements.yaml 如下所示。 “依赖项”是您希望部署的服务。

dependencies:
  - name: accounts
    repository: "<your repo>"
    version: "= 1.2144.0"
  - name: rollover
    repository: "<your repo>"
    version: "= 1.2140.0"

下图将帮助您可视化我上面提到的内容:

【讨论】:

猜你喜欢
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多