在传统架构中,构建一个中间件集群,如三主三从的 Redis 集群,需遵循以下步骤:首先申请 3 至 6 台服务器并进行性能优化配置,例如调整内核参数。接着,从 Redis 官网下载并安装 Redis 安装包到每台服务器上,完成相应配置。最后,启动服务并建立集群。
相比之下,在 Kubernetes 中,利用其包管理工具可以更便捷地搭建中间件集群,最常用的工具包括 Operator 和 Helm。简而言之,包管理工具用于统一管理相关文件定义,便于通过这些工具管理复杂应用,如 MySQL 集群和 Redis 集群,实现一键创建、扩容和备份等功能。此外,公司内开发的应用程序也可通过 Kubernetes 的包管理工具进行管理。
12.1 Helm 介绍与安装
12.1.1 Helm 是什么
Helm 是一个用 Go 语言开发的 Kubernetes 包管理工具,类似于 Linux 中的 apt 或 yum。它允许用户定义、安装和管理 Kubernetes 应用程序。通过 Helm Charts(一种打包格式),用户可以简化应用的部署和管理,便捷地处理复杂的 Kubernetes 资源配置。Helm 3 于 2019 年 11 月 13 日发布,并于 2020 年 4 月 30 日从 CNCF 毕业。
Helm 的架构和工作原理主要包括以下几个核心部分:
12.1.2 核心组件
- Helm CLI:用户通过命令行界面与 Helm 进行交互,执行安装、升级、回滚等操作。
- Chart: Chart 是一个打包的 Kubernetes 应用程序,包括必要的配置和资源定义,就像 Docker 镜像包含了应用程序及其依赖。
- Chart 仓库:Chart 仓库存储和分发 Helm Charts,类似于 Docker 仓库存放和管理 Docker 镜像。
- Release :Release 是 Chart 的一个实例,包含具体的配置和状态,就像 Docker 容器是从镜像创建的具体运行实例。
12.1.3 工作原理
- 安装 Chart:用户用
helm install命令选择要安装的 Chart,Helm 从仓库下载并生成资源清单。 - 渲染模板:Helm 根据用户提供的值(如
values.yaml)渲染模板,生成最终的 Kubernetes 清单。 - 与 Kubernetes 交互:Helm 通过 Kubernetes API 发送资源清单,创建相应的资源(如 Pods、Services)。
- 管理 Release:Helm 记录每个 Release 的配置和版本,支持升级和回滚操作,方便用户管理已安装的 Release。
12.1.4 安装 Helm 客户端(CLI)
Helm V3 和 V2 的安装方式不同:V3 仅需将客户端二进制文件放入 /usr/local/bin,而 V2 还需安装 Tiller 服务端。鉴于 V3 目前是主要版本,本文后续操作将基于 V3。
参考链接:https://helm.sh/doc/intro/install
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
tar xvf helm-v3.12.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
12.2 Chart 的结构
12.2.1 Chart 结构
使用 helm create 命令创建的 Helm Chart 生成的目录和文件结构如下:
[root@master-01 ~]# helm create my-helm
Creating my-helm
[root@master-01 ~]# ls
my-helm
[root@master-01 ~]# tree my-helm/
my-helm/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 10 files
目录和文件说明
-
charts/:存放该 Chart 依赖的其他 Charts。 -
Chart.yaml:Chart 的元数据文件,包含名称、版本、描述及维护者信息。 -
templates/:用于生成 Kubernetes 资源的模板文件,具体如下:deployment.yaml:定义 Kubernetes Deployment 资源,管理应用副本和更新策略。_helpers.tpl:存放可复用的模板函数,以减少代码重复。hpa.yaml:定义 Horizontal Pod Autoscaler,自动调整 Pod 数量。ingress.yaml:定义 Ingress 资源,管理外部访问的路由规则。NOTES.txt:提供安装后的提示信息,通常包含访问应用的说明。serviceaccount.yaml:定义 Kubernetes ServiceAccount,用于身份管理和授权。service.yaml:定义 Kubernetes Service 资源,提供对 Pods 的网络访问。tests/test-connection.yaml:用于测试 Chart 是否成功部署的文件,可以通过 Helm 测试命令执行。
-
values.yaml:包含默认的配置值,用户可通过-f参数覆盖特定值以满足部署需求。
文件分类
这些文件大体可以分为两类:
- 模板文件:如
deployment.yaml、ingress.yaml等,用于生成 Kubernetes 资源定义。 - 配置文件:如
values.yaml,通常只有一个,提供可配置的参数。
Helm 的模板文件基于 text/template,具有强大的渲染能力,能够将 values.yaml 中的值替换到模板中,生成最终可部署的 Kubernetes YAML 资源。

12.2.2 Chart 语法
Helm 基于 Go 的模板语法,使得在 YAML 文件中插入动态内容变得简单。常见的模板语法元素包括:
- 在 Helm 模板中,
.表示当前上下文,能访问当前模板的变量和配置,或传递给其他模板函数。 - 在 Helm 模板中,
include用于引入其他模板,通常在templates/_helpers.tpl中定义,返回完整的资源名称,有助于保持名称一致性。 - 变量引用:通过
{{ .Values.variable_name }}引用values.yaml中的变量。 - 条件语句:使用
{{ if .Values.condition }}控制模板渲染的条件。 - 循环:利用
{{ range .Values.list }}遍历列表。 - 函数:Helm 提供多种内置函数,如
quote和trim。
更多详情请参阅官方文档:Helm 模板指南。
示例:编写一个 Nginx 的Chart
1. 创建 Helm Chart 目录结构
首先,您需要创建一个 Helm Chart 的基本目录结构。可以使用 Helm CLI 命令来自动生成,或者手动创建。
使用 Helm CLI 创建 Chart
helm create my-nginx
这会创建一个名为 my-nginx 的目录,并生成一个基本的 Helm Chart 结构。
目录结构
生成的目录结构如下:
my-nginx/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
3 directories, 10 files
2. 编辑 Chart.yaml
修改内容以描述 Chart:
apiVersion: v2
name: my-nginx
description: A Helm chart for Kubernetes Nginx deployment
version: 0.1.0
3. 编辑 values.yaml
在 values.yaml 文件中定义默认值:
replicaCount: 1
image:
repository: nginx
pullPolicy: IfNotPresent
tag: stable
service:
type: ClusterIP
port: 80
ingress:
enabled: true
hosts:
- host: my-nginx.local
paths:
- /
serviceAccount:
create: true
name: ""
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 80
4. 创建模板文件
在 templates/ 目录下,创建和编辑以下文件:
① templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "my-nginx.fullname" . }}
labels:
app: {{ include "my-nginx.fullname" . }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ include "my-nginx.fullname" . }}
template:
metadata:
labels:
app: {{ include "my-nginx.fullname" . }}
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
解析:
-
{{ include "my-nginx.fullname" . }}: 这个语句用于引入其他模板,通常在templates/_helpers.tpl中定义,返回完整的资源名称,有助于保持名称一致性。 -
{{ .Values.replicaCount }}: 通过这个语法访问values.yaml文件中的replicaCount值,允许用户在部署时自定义副本数量。 -
{{ .Values.image.repository }}和{{ .Values.image.tag }}: 这两个字段用于指定容器镜像的仓库和标签,方便在不同环境中灵活配置。
② templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: {{ include "my-nginx.serviceName" . }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 80
selector:
app: {{ include "my-nginx.fullname" . }}
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "my-nginx.fullname" . }}
labels:
{{- include "my-nginx.labels" . | nindent 4 }}
{{- end -}}
解析:
{{- if .Values.serviceAccount.create -}}: 这是一个条件语句,检查values.yaml中的serviceAccount.create值是否为true。如果为true,则生成 ServiceAccount 资源;如果为false,则不生成。name: {{ include "my-nginx.fullname" . }}: 使用include函数从其他模板中引入 ServiceAccount 的名称,确保名称的一致性和易于管理。通常在templates/_helpers.tpl中定义。{{- include "my-nginx.labels" . | nindent 4 }}: 通过include函数引入标签定义,并使用nindent 4函数将标签缩进四个空格,确保 YAML 格式正确。标签通常用于识别和选择资源,方便管理和查询。{{- end -}}:- 结束条件语句。如果前面的条件为
false,那么这部分内容将被忽略,不会出现在最终的输出 YAML 文件中。
- 结束条件语句。如果前面的条件为
③ templates/serviceaccount.yaml
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "my-nginx.fullname" . }}
labels:
{{- include "my-nginx.labels" . | nindent 4 }}
{{- end -}}
④ templates/ingress.yaml
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "my-nginx.fullname" . }}
spec:
rules:
- host: {{ index .Values.ingress.hosts 0 "host" }}
http:
paths:
- path: {{ index (index .Values.ingress.hosts 0 "paths") 0 }}
pathType: Prefix
backend:
service:
name: {{ include "my-nginx.serviceName" . }}
port:
number: {{ .Values.service.port }}
{{- end -}}
解析:
host: {{ index .Values.ingress.hosts 0 "host" }}:使用index函数从values.yaml中的ingress.hosts列表中获取第一个(0表示第一个)元素的host属性。path: {{ index (index .Values.ingress.hosts 0 "paths") 0 }}: 这行使用嵌套的index函数,首先获取ingress.hosts列表的第一个元素,然后获取该元素中的paths属性,再从中获取第一个路径。
⑤ templates/hpa.yaml
{{- if .Values.autoscaling.enabled -}}
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "my-nginx.fullname" . }}
spec:
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end -}}
⑥ templates/_helpers.tpl
{{/*
Create a name for the Nginx deployment
*/}}
{{- define "my-nginx.fullname" -}}
{{- printf "%s-nginx" .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a name for the service
*/}}
{{- define "my-nginx.serviceName" -}}
{{- printf "%s-nginx" .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create common labels
*/}}
{{- define "my-nginx.labels" -}}
app: {{ include "my-nginx.fullname" . }}
release: {{ .Release.Name }}
{{- end -}}
解析如下:
-
{{/* Create a name for the Nginx deployment */}}: 注释,说明后面定义的是生成 Nginx 部署名称的模板。 -
{{- define "my-nginx.fullname" -}}: 开始定义名为my-nginx.fullname的模板。 -
{{- printf "%s-nginx" .Release.Name | trunc 63 | trimSuffix "-" -}}- 使用
printf格式化字符串,将 Helm 发布名称(.Release.Name)与-nginx组合。 trunc 63确保名称不超过 63 个字符,trimSuffix "-"去掉可能的尾随连字符。
- 使用
-
{{- end -}}: 结束my-nginx.fullname模板的定义。 -
{{/* Create common labels */}}:注释,说明后面定义的是通用标签的模板。 -
{{- define "my-nginx.labels" -}}:开始定义名为my-nginx.labels的模板。app: {{ include "my-nginx.fullname" . }}:使用include函数引入my-nginx.fullname模板生成的名称,作为app标签的值。release: {{ .Release.Name }}:直接引用发布名称作为release标签的值。
-
{{- end -}}:结束my-nginx.labels模板的定义。
该文件定义了三个模板:生成 Nginx 部署和服务的名称,以及通用标签。这些模板通过格式化和引用 Helm 的上下文信息,实现了名称和标签的一致性和可维护性,便于 Helm Chart 的复用和管理。
⑦ templates/NOTES.txt
{{- if .Values.ingress.enabled -}}
1. Access your application at:
http://{{ (index .Values.ingress.hosts 0).host }}{{ (index (index .Values.ingress.hosts 0).paths 0) }}
{{- end -}}
解析如下:
{{- if .Values.ingress.enabled -}}:检查ingress是否启用。1. Access your application at::提示用户访问应用程序的地址。http://{{ (index .Values.ingress.hosts 0).host }}{{ (index (index .Values.ingress.hosts 0).paths 0) }}- 生成应用程序的访问 URL:
{{ (index .Values.ingress.hosts 0).host }}:获取第一个主机名。{{ (index (index .Values.ingress.hosts 0).paths 0) }}:获取第一个路径。
{{- end -}}:结束if语句的条件判断。
这段代码用于在启用 Ingress 时,生成并显示应用程序的访问 URL,便于用户快速找到并访问该应用。
6. 渲染模板
运行 helm template 命令时,Helm 会使用 values.yaml 中的值填充模板,生成最终的 Kubernetes 资源清单。例如:
helm template my-release ./my-nginx
执行该命令后,Helm 将上述的模板和配置文件进行渲染成资源清单:
[root@master-01 ~]# helm template my-release ./my-nginx
---
# Source: my-nginx/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-release-nginx
labels:
app: my-release-nginx
release: my-release
---
# Source: my-nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-release-nginx
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
app: my-release-nginx
---
# Source: my-nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-release-nginx
labels:
app: my-release-nginx
spec:
replicas: 1
selector:
matchLabels:
app: my-release-nginx
template:
metadata:
labels:
app: my-release-nginx
spec:
containers:
- name: nginx
image: "nginx:stable"
ports:
- containerPort: 80
---
# Source: my-nginx/templates/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-release-nginx
spec:
rules:
- host: my-nginx.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-release-nginx
port:
number: 80
---
# Source: my-nginx/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
name: "my-release-nginx-test-connection"
labels:
app: my-release-nginx
release: my-release
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['my-release-nginx:80']
restartPolicy: Never
[root@master-01 ~]#
7. 安装和测试
通过 Helm CLI 来安装这个 Chart:
helm install my-nginx ./my-nginx
8. 检查部署状态
可以使用以下命令检查部署状态:
kubectl get all
[root@master-01 ~]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-nginx-nginx-6449746cd4-xz6kq 1/1 Running 0 108s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.112.0.1 <none> 443/TCP 217d
service/my-nginx-nginx ClusterIP 10.119.60.128 <none> 80/TCP 108s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx-nginx 1/1 1 1 108s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx-nginx-6449746cd4 1 1 1 108s
[root@master-01 ~]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
my-nginx-nginx <none> my-nginx.local 80 2m14s
12.3 Helm 常用命令
Helm 是 Kubernetes 的一个包管理工具,提供了一系列命令用于管理 Helm chart。以下是 Helm 的常用命令及其简要说明:
1. Helm 版本
helm version
2. Helm 帮助
helm help
3. 创建 Chart
helm create <chart-name>
4. 列出 Chart
helm search repo <keyword>
5. 查看 Chart 的元数据信息
helm show chart <chart>
6. 添加 Chart 仓库
helm repo add <repo-name> <repo-url>
更新 Chart 仓库:
helm repo update
7. 删除 Chart 仓库
helm repo remove <repo-name>
8. 拉取 Chart 仓库
helm pull <chart-name>
9. 渲染 Chart
可以使用 helm template 命令渲染 Chart,查看最终的 YAML 输出。这会将模板替换为实际值,您可以在输出中查找 apiVersion 的实际值:
helm template <release-name> <chart-name>
10. 安装 Chart
helm install 命令可以用于安装远程的 Chart、本地的 Chart 以及解压后的 Chart 目录。以下是如何进行这些安装的说明:
要从远程仓库安装 Chart,可以直接使用 Chart 名称:
helm install <release-name> <chart-name>
例如,安装 Bitnami 的 Nginx Chart:
helm install my-nginx bitnami/nginx
安装本地 Chart:
如果您有一个本地的 Chart 包(.tgz 文件),可以通过指定文件路径进行安装:
helm install <release-name> ./path/to/chart.tgz
示例:
helm install my-nginx ./charts/nginx-1.0.0.tgz
安装解压后的 Chart 目录:
如果您已经将 Chart 解压,可以直接指定解压后的目录进行安装:
helm install <release-name> ./path/to/extracted/chart
示例:
helm install my-nginx ./nginx
指定一个 YAML 文件,以覆盖默认的值或提供自定义配置:
可以通过 -f 选项:
helm install <release-name> <chart> -f <values-file.yaml>
helm install my-release ./my-chart -f custom-values.yaml
11. 升级 Release
helm upgrade <release-name> <chart>
12. 卸载 Release
helm uninstall <release-name>
13. 查看 Release 状态
helm status <release-name>
14. 列出 Releases
helm list
15. 获取 Release 配置
helm get values <release-name>
16. 回滚 Release
在 Helm 中,回滚发布非常简单。您可以使用 helm rollback 命令将发布恢复到之前的版本。以下是具体步骤:
1. 查看发布历史
首先,您可以使用以下命令查看 Helm 发布的历史版本:
helm history <release-name>
<release-name>是您要回滚的 Helm 发布的名称。
这个命令会列出该发布的所有历史版本及其状态。
2. 回滚到特定版本
要回滚到特定版本,您可以使用以下命令:
helm rollback <release-name> <revision>
<release-name>:要回滚的发布名称。<revision>:您想要回滚到的版本号(可以从上一步的历史中获取)。
例如,如果您想将发布 my-app 回滚到版本 2,可以执行:
helm rollback my-app 2
3. 附加参数
您还可以使用一些附加参数,例如:
--namespace <namespace>:指定发布所在的命名空间。--dry-run:模拟回滚,不执行实际操作,适用于测试。
4. 检查回滚结果
回滚后,可以使用以下命令检查当前发布的状态:
helm status <release-name>
这将帮助您确认回滚是否成功。
示例
假设您有一个名为 my-app 的 Helm 发布,想要将其回滚到版本 3:
helm history my-app
# 假设输出中显示了版本 3
helm rollback my-app 3
这样就完成了回滚操作。如果您有其他问题或需要进一步的帮助,请随时问我!
12.4 Helm 的使用流程
Helm 的使用流程可以简化为以下几个步骤:
- 安装 Helm:下载并安装 Helm 工具。
- 添加仓库:使用
helm repo add命令添加 Chart 仓库。 - 搜索 Charts:通过
helm search查找可用的 Charts。 - 安装 Chart:使用
helm install命令安装所选的 Chart。 - 配置 Values:如需自定义,创建或修改 values 文件,并在安装时通过
-f参数指定。 - 升级或卸载:使用
helm upgrade或helm uninstall命令管理已安装的 Charts。
示例:使用 Helm 安装一个 Nginx 应用
1. 安装 Helm
确保您已安装 Helm。使用以下命令验证安装:
helm version
2. 添加 Chart 仓库
为了找到需要的应用程序,添加一个或多个 Helm Chart 仓库。例如,添加 Bitnami 的 Nginx chart:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
3. 搜索 Chart
使用以下命令查找可用的 Nginx chart:
helm search repo nginx
输出示例:
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx 14.7.1 1.23.3 Nginx is a high-performance web server
4. 拉取 Chart
下载 Chart 到本地,以便离线安装或自定义修改:
helm pull bitnami/nginx
tar -xvf nginx-14.7.1.tgz
您可以查看 Nginx chart 的元数据信息:
helm show chart bitnami/nginx
5. 自定义配置
创建一个名为 custom-values.yaml 的文件,覆盖默认值:
service:
type: NodePort
port: 80
6. 安装 Chart
使用自定义值文件安装 Nginx:
helm install my-nginx bitnami/nginx -f ./custom-values.yaml
my-nginx是为该 release 指定的名称。bitnami/nginx是要安装的 chart。-f custom-values.yaml指定自定义配置文件。
7. 查看 Release 状态
安装后,检查 Release 的状态:
helm status my-nginx
8. 通过 Kubectl 查看状态
kubectl get all
输出内容:
NAME READY STATUS RESTARTS AGE
pod/my-nginx-5bb4d69796-m5lcv 1/1 Running 0 7m57s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.112.0.1 <none> 443/TCP 216d
service/my-nginx NodePort 10.116.160.178 <none> 80:30701/TCP,443:31485/TCP 7m57s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx 1/1 1 1 7m57s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx-5bb4d69796 1 1 1 7m57s
9. 列出所有 Releases
查看所有已安装的 releases:
helm list
10. 升级 Release
创建一个名为 custom-values-v2.yaml 的文件进行版本更新:
service:
type: LoadBalancer # 修改类型
port: 80
更新配置并执行:
helm upgrade my-nginx bitnami/nginx -f ./custom-values-v2.yaml
[root@master-01 ~]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-nginx-5bb4d69796-m5lcv 1/1 Running 0 14m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.112.0.1 <none> 443/TCP 216d
service/my-nginx LoadBalancer 10.116.160.178 <pending> 80:30701/TCP,443:31485/TCP 14m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx 1/1 1 1 14m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx-5bb4d69796 1 1 1 14m
我们发现 Service 的类型修改为 LoadBalancer。
11. 回滚
查看历史版本并回滚:
helm history my-nginx
helm rollback my-nginx 1
[root@master-01 templates]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-nginx-5bb4d69796-m5lcv 1/1 Running 0 7m57s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.112.0.1 <none> 443/TCP 216d
service/my-nginx NodePort 10.116.160.178 <none> 80:30701/TCP,443:31485/TCP 7m57s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-nginx 1/1 1 1 7m57s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-nginx-5bb4d69796 1 1 1 7m57s
我们发现 Service 的类型又回到上一个版本 NodePort。
12. 卸载 Release
当不再需要该应用程序时,卸载它:
helm uninstall my-nginx
评论区