Yon*_*Nir 8 docker dockerfile kubernetes-helm
我需要学习一个 CI 管道,其中有一个步骤是使用 Dockerfile 构建和推送图像,另一个步骤是创建 helm 图表图像,其中有由 docker 文件创建的图像的定义。之后,有一个 CD 管道,其中仅安装由 Helm Chart 创建的内容。
通过 Dockerfile 直接创建的镜像与通过 helm Chart 创建的镜像有什么区别?为什么 Docker 镜像不够用?
Dha*_*ria 16
量力而行
要使用 docker 镜像在 Kubernetes 上部署服务,您需要手动创建各种配置文件,例如deployment.yaml. 随着您的环境中添加越来越多的服务,此类文件会不断增加。
在 Helm 图表中,我们可以提供希望在文件中部署的所有服务的列表,Helm 将确保使用、&文件requirements.yaml将所有这些服务部署到目标环境。deployment.yamlservice.yamlvalues.yaml
要维护的配置
此外,添加路由、配置映射、机密等配置也需要手动进行,并且需要在服务部署之上进行配置。
例如,如果您想在您的环境中添加 Nginx 代理,您需要使用 Nginx 镜像以及您的功能服务的所有代理配置单独部署它。
但对于 Helm 图表,这可以通过在 Helm 图表中仅配置一个文件来实现:ingress.yaml
灵活性
使用 docker 镜像,我们需要为要部署服务的每个环境提供配置。
但是使用 Helm Chart,我们可以使用特定于环境的文件覆盖现有 Helm Chart 的属性values.yaml。使用诸如 之类的工具,这变得更加容易ArgoCD。
代码片段:
deployment.yaml以下是如果我们想使用 docker-image 部署一项服务则需要创建的文件示例。
内联中,我还描述了如何使用不同的文件(如和)deployment.yaml在 Helm 存储库中填充通用模板requirements.yamlValues.yaml
一项服务的部署.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:...
Run Code Online (Sandbox Code Playgroud)
您的deployment.yamlHelm 图表可以是通用模板(下面的代码片段),其中使用文件填充详细信息values.yaml。
env:
{{- range $key, $value := .Values.global.envVariable.common }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
你的Values.yaml看起来像这样:
accounts:
imagePullSecrets:
- name: regcred
envVariable:
service:
vars:
spring_data_mongodb_database: accounts_db
spring_product_name: crazy-project
...
Run Code Online (Sandbox Code Playgroud)
你的requirements.yaml会像下面这样。“依赖项”是您希望部署的服务。
dependencies:
- name: accounts
repository: "<your repo>"
version: "= 1.2144.0"
- name: rollover
repository: "<your repo>"
version: "= 1.2140.0"
Run Code Online (Sandbox Code Playgroud)
下图将帮助您直观地了解我上面提到的内容:
| 归档时间: |
|
| 查看次数: |
11602 次 |
| 最近记录: |