有趣生活

当前位置:首页>科技>helm参数模板K8S工具分享-IBM出品的Helm入门系列之更新应用

helm参数模板K8S工具分享-IBM出品的Helm入门系列之更新应用

发布时间:2026-07-21阅读(1)

导读在Lab1中,我们使用Helm安装了guestbook示例应用程序,并看到了相较于kubectl的优势我们可能认为自己已经足够了解使用Helm但是chart....

在Lab1中,我们使用Helm安装了guestbook示例应用程序,并看到了相较于kubectl的优势我们可能认为自己已经足够了解使用Helm但是chart的更新或修改呢?我们如何更新和修改正在运行的应用?,现在小编就来说说关于helm参数模板?下面内容希望能帮助到你,我们来一起看看吧!

helm参数模板(K8S工具分享-IBM出品的Helm入门系列之更新应用)

helm参数模板

Lab2 使用Helm更新应用

在Lab1中,我们使用Helm安装了guestbook示例应用程序,并看到了相较于kubectl的优势。我们可能认为自己已经足够了解使用Helm。但是chart的更新或修改呢?我们如何更新和修改正在运行的应用?

在本实验中,我们将研究chart更改后如何更新正在运行的应用程序。为了说明这一点,我们将通过以下方式对原始留言簿的chart进行更改:

  • 删除Redis从节点并改为仅使用内存数据库
  • 将类型从LoadBalancer更改为NodePort

虽然是认为修改,但是本实验的目的是展示如何使用Kubernetes和Helm更新应用。那么,这样做有多容易呢?让我们继续看看。

场景1: 使用kubectl更新应用

在本部分的实验中,我们将直接使用Kubernetes更新以前部署的应用程序Guestbook。

  1. 这是一个可选步骤,从技术上讲,更新正在运行的应用程序不是必需的。进行此步骤的原因是“整理”-我们要为已部署的当前配置获取正确的文件。这样可以避免在以后进行更新甚至回滚时犯错误。在此更新的配置中,我们删除了Redis从节点。要使目录与配置匹配,请移动/存档或仅从文件夹中删除Redis从属文件:

cd guestbook/v1rm redis-slave-service.yamlrm redis-slave-deployment.yaml

注意:如果需要,可以稍后使用git checkout-命令来还原这些文件。

  1. 删除Redis从节点的Service和Pod:

$ kubectl delete svc redis-slave --namespace defaultservice "redis-slave" deleted$ kubectl delete deployment redis-slave --namespace defaultdeployment.extensions "redis-slave" deleted

  1. 将Guestbook服务的yaml从LoadBalancer更新为NodePort类型:

sed -i.bak s/LoadBalancer/NodePort/g guestbook-service.yaml

  1. 删除Guestbook运行时服务

kubectl delete svc guestbook --namespace default

  1. 重新创建具有NodePort类型的服务:

kubectl create -f guestbook-service.yaml

  1. 使用以下命令检查更新:

$ kubectl get all --namespace defaultNAME READY STATUS RESTARTS AGEpod/guestbook-v1-7fc76dc46-9r4s7 1/1 Running 0 1hpod/guestbook-v1-7fc76dc46-hspnk 1/1 Running 0 1hpod/guestbook-v1-7fc76dc46-sxzkt 1/1 Running 0 1hpod/redis-master-5d8b66464f-pvbl9 1/1 Running 0 1hNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/guestbook NodePort 172.21.45.29 <none> 3000:31989/TCP 31sservice/kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 9dservice/redis-master ClusterIP 172.21.232.61 <none> 6379/TCP 1hNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/guestbook-demo 3/3 3 3 1hdeployment.apps/redis-master 1/1 1 1 1hNAME DESIRED CURRENT READY AGEreplicaset.apps/guestbook-v1-7fc76dc46 3 3 3 1hreplicaset.apps/redis-master-5d8b66464f 1 1 1 1h

注意:服务类型已更改(更改为NodePor),并且已为留言簿服务分配了新端口(在此输出情况下为31989)。所有redis-slave资源均已删除。

  1. 获取节点的公共IP,并重新访问应用提供的服务:

kubectl get nodes -o wide

场景2: 使用Helm更新应用

在本节中,我们将使用Helm更新以前部署的guestbook-demo应用程序。

在开始之前,让我们花几分钟看一下Helm与直接使用Kubernetes相比如何简化流程。Helm使用模板语言为chart提供了极大的灵活性和强大的功能,从而为chart用户消除了复杂性。在留言簿示例中,我们将使用以下模板功能:

  • Values:提供访问传递到chart中的值的对象。例如在guestbook-service中,它包含以下类型:.Values.service.type。此行提供了在升级或安装期间设置服务类型的功能。
  • 控制结构:在模板中也称为“动作”,控制结构使模板能够控制生成的流程。一个例子是在redis-slave-service中,它包含行-if .Values.redis.slaveEnabled-。该行允许我们在升级或安装期间启用/禁用REDIS主/从。

如下所示,完整的redis-slave-service.yaml演示了在禁用slaveEnabled标志时文件如何变得冗余以及如何设置端口值。其他chart文件中还有更多的模板功能示例。

{{- if .Values.redis.slaveEnabled -}}apiVersion: v1kind: Servicemetadata: name: redis-slave labels: app: redis role: slavespec: ports: - port: {{ .Values.redis.port }} targetPort: redis-server selector: app: redis role: slave{{- end }}

helm list -n helm-demo

请注意,我们指定了名称空间。如果未指定,它将使用当前的名称空间上下文。我们应该看到类似于以下内容的输出:

$ helm list -n helm-demoNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONguestbook-demo helm-demo 1 2020-02-24 18:08:02.017401264 0000 UTC deployed guestbook-0.2.0

list命令提供已部署chart(发行版)的列表,其中提供了chart版本,名称空间,更新(修订)数量等信息。

  1. 我们更新应用程序:

$ cd helm101/charts$ helm upgrade guestbook-demo ./guestbook --set redis.slaveEnabled=false,service.type=NodePort --namespace helm-demoRelease "guestbook-demo" has been upgraded. Happy Helming!...

Helm升级将采用现有版本,并根据提供的信息对其进行升级。我们应该看到类似于以下内容的输出:

$ helm upgrade guestbook-demo ./guestbook --set redis.slaveEnabled=false,service.type=NodePort --namespace helm-demoRelease "guestbook-demo" has been upgraded. Happy Helming!NAME: guestbook-demoLAST DEPLOYED: Tue Feb 25 14:23:27 2020NAMESPACE: helm-demoSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:1. Get the application URL by running these commands: export NODE_PORT=$(kubectl get --namespace helm-demo -o jsonpath="{.spec.ports[0].nodePort}" services guestbook-demo) export NODE_IP=$(kubectl get nodes --namespace helm-demo -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT

upgrade命令将应用程序升级到chart的指定版本,删除redis-slave资源,并将应用程序service.type更新为NodePort。

使用kubectl get all --namespace helm-demo获取更新内容:

$ kubectl get all --namespace helm-demoNAME READY STATUS RESTARTS AGEpod/guestbook-demo-6c9cf8b9-dhqk9 1/1 Running 0 20hpod/guestbook-demo-6c9cf8b9-zddn2 1/1 Running 0 20hpod/redis-master-5d8b66464f-g7sh6 1/1 Running 0 20hNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/guestbook-demo NodePort 172.21.43.244 <none> 3000:31202/TCP 20hservice/redis-master ClusterIP 172.21.12.43 <none> 6379/TCP 20hNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/guestbook-demo 2/2 2 2 20hdeployment.apps/redis-master 1/1 1 1 20hNAME DESIRED CURRENT READY AGEreplicaset.apps/guestbook-demo-6c9cf8b9 2 2 2 20hreplicaset.apps/redis-master-5d8b66464f 1 1 1 20h

注意:服务类型已更改(更改为NodePort),并且已为留言簿服务分配了新端口(在此输出情况下为31202)。所有redis-slave资源均已删除。

当我们使用helm list -n helm-demo命令检查Helm版本时,可以看到revision和日期已更新:

$ helm list -n helm-demoNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONguestbook-demo helm-demo 2 2020-02-25 14:23:27.06732381 0000 UTC deployed guestbook-0.2.0

获取节点的公共IP,并重新访问应用提供的服务:

kubectl get nodes -o wide

结论

恭喜,现在已经更新了应用程序! Helm不需要任何手动更改资源,因此非常容易升级!所有配置都可以在命令行上即时设置,也可以使用替代文件设置。从将逻辑添加到模板文件后就可以实现这一点,这取决于flag标识,启用或禁用此功能。

TAGS标签:  helm  参数  模板  工具  分享  helm参数模板K8

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图