gpt4 book ai didi

docker - 推送 docker 镜像和安装 helm 镜像的区别

转载 作者:行者123 更新时间:2023-12-05 01:06:01 28 4
gpt4 key购买 nike

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

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

最佳答案

努力程度

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

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

要维护的配置

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

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

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

灵 active

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

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

代码片段:

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

内联,我还描述了如何填充通用 deployment.yaml Helm 存储库中的模板使用不同的文件,如 requirements.yamlValues.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:...

您的deployment.yaml在 Helm 图表中可以是一个通用模板(下面的代码片段),其中使用 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"

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

Docker image v/S Helm chart

关于docker - 推送 docker 镜像和安装 helm 镜像的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70093925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com