helm的常见使用方式

用helm部署第一个服务

1.安装服务,若不指定名称空间,则默认安装default名称空间。默认用的是nginx deployment

[root@master23105-helm]# helm create zhiyong18-web && cd zhiyong18-web

# 可以发现模板中用到的默认变量值是 nginx,所以默认部署一个nginx
[root@master231zhiyong18-web]# grep -A 2 '^image:' values.yaml
image:
  repository: nginx
  pullPolicy: IfNotPresent

2.使用 helm install 自定义的应用名称 Chart目录 方式创建一个we服务。

[root@master23105-helm]# helm install luckyboy-web zhiyong18-web

[root@master23105-helm]# helm list
NAME        	NAMESPACE	REVISION	UPDATED                               	STATUS  	CHART              	APP VERSION
luckyboy-web	default  	1       	2024-11-23 13:30:36.34266663 +0000 UTC	deployed	zhiyong18-web-0.1.0	1.16.0     

[root@master23105-helm]# kubectl get pods
NAME                                          READY   STATUS              RESTARTS   AGE
luckyboy-web-zhiyong18-web-6bcc8788cd-9ch85   0/1     ContainerCreating   0          15s

2.服务卸载;会自动删除该Chart下的所有资源清单文件

[root@master23105-helm]# helm uninstall luckyboy-web
修改value为自己的镜像

1.我们只需要对 values.yaml的repository、tag字段修改为自己仓库的镜像就可以实现。这里使用sed替换比较方便,就不用vim打开了

sed -i '/repository:/s#nginx#registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps#' zhiyong18-web/values.yaml

sed -i '/tag:/s#""#v1#' zhiyong18-web/values.yaml

2.查看一下,这样就等于传统yaml中的:image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1

[root@master23105-helm]# grep -A 4 '^image:' zhiyong18-web/values.yaml 
image:
  repository: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: v1

3.把自定义镜像的chart给部署起来

[root@master23105-helm]# helm install myweb zhiyong18-web

[root@master23105-helm]# kubectl get pods myweb-zhiyong18-web-6b4b5b59d9-27kfx 
NAME                                   READY   STATUS    RESTARTS   AGE
myweb-zhiyong18-web-6b4b5b59d9-27kfx   1/1     Running   0          46s

4.增加-n 名称空间名字指定名称空间进行部署;先卸载之前的web服务,否则冲突

[root@master23105-helm]# helm uninstall myweb 
release "myweb" uninstalled

[root@master23105-helm]# kubectl create ns zhiyong18-helm
namespace/zhiyong18-helm created

[root@master23105-helm]# helm install myweb zhiyong18-web -n zhiyong18-helm

[root@master23105-helm]# kubectl -n zhiyong18-helm get pods
NAME                                   READY   STATUS    RESTARTS   AGE
myweb-zhiyong18-web-6b4b5b59d9-4x4s4   1/1     Running   0          29s

看到这,是不是绝对helm非常容易上手了呢。没错。循序渐进

不使用value模版部署服务

values.yaml 是模板文件提供引用值。如果不使用模板的话,那写起来和普通的yaml没有太大区别

1.补充一下kubeadm部署的K8S,自定义svc端口范围。vim /etc/kubernetes/manifests/kube-apiserver.yaml

增加 - --service-node-port-range=3000-50000

...
12 spec:
13   containers:
14   - command:
15     - kube-apiserver
16     - --advertise-address=10.0.0.231
17     - --service-node-port-range=3000-50000
...

2.创建chart后,清空模板文件

[root@master23105-helm]# helm create 01-zhiyong18-no-value
Creating 01-zhiyong18-no-value

[root@master23105-helm]# > 01-zhiyong18-no-value/values.yaml

[root@master23105-helm]# rm -rf 01-zhiyong18-no-value/templates/*

3.准备自定义资源清单

svc的yaml:

cat 01-zhiyong18-no-value/templates/service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: xiuxian-svc-nodeport
spec:
  type: NodePort
  selector:
    apps: xiuxian
  ports:
  - port: 80
    targetPort: 80
    nodePort: 3080

工作负载(也就是控制器)的yaml:

cat 01-zhiyong18-no-value/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-xiuxian
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: xiuxian
  template:
    metadata:
      labels:
        apps: xiuxian
        version: v1
    spec:
       containers:
       - name: c1
         image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v3

4.部署测试

[root@master23105-helm]# helm install xiuxian 01-zhiyong18-no-value -n zhiyong18-helm
NAME: xiuxian
LAST DEPLOYED: Sat Nov 23 14:24:03 2024
NAMESPACE: zhiyong18-helm
STATUS: deployed
REVISION: 1
TEST SUITE: None

[root@master23105-helm]# helm list -n zhiyong18-helm
NAME   	NAMESPACE     	REVISION	UPDATED                               	STATUS  	CHART                      	APP VERSION
xiuxian	zhiyong18-helm	1       	2024-11-23 14:24:03.72083673 +0000 UTC	deployed	01-zhiyong18-no-value-0.1.0	1.16.0 

使用原生kubectl查看名称空间下的所有资源

[root@master23105-helm]# kubectl -n zhiyong18-helm get all
NAME                                 READY   STATUS    RESTARTS   AGE
pod/deploy-xiuxian-5b85959cd-27lkx   1/1     Running   0          2m31s
pod/deploy-xiuxian-5b85959cd-hmfs7   1/1     Running   0          2m31s
pod/deploy-xiuxian-5b85959cd-xhm9p   1/1     Running   0          2m31s

NAME                           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)       AGE
service/xiuxian-svc-nodeport   NodePort   10.200.135.162   <none>        80:3080/TCP   2m31s

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-xiuxian   3/3     3            3           2m31s

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/deploy-xiuxian-5b85959cd   3         3         3       2m31s
Chart.yaml元数据文件

之前提到过chart.yaml是Chart 的元数据。参考链接:https://semver.org/lang/zh-CN/

  • type
    • application表示当前Chart是一个应用程序,可以直接部署;
    • ibrary表示当前Chart是一个库,当前库不提供任何模板文件,因此无法进行部署;但是library库可以定义函数以供application类型的Chart进行调用
  • version:表示 Helm Chart 的版本,是 Chart 的核心属性,直接影响到 Chart 的发布与升级
    • 主版本号:当你做了不兼容的 API 修改
    • 次版本号:当你做了向下兼容的功能性新增
    • 修订号:当你做了向下兼容的问题修正
  • appVersion:是应用程序的版本,用于描述 Chart 部署的实际应用版本。举例容器镜像是 nginx:1.16.0
[root@master23105-helm]# cat 01-zhiyong18-no-value/Chart.yaml 
apiVersion: v2
# 这个 chart 名字可以任意取,不过还是根据应用名称或业务命名比较合理
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
# 定义Chart的类型,有效值为: application 、library
type: application
# 版本号,类似于下载的软件,V几点几。这也可以自定义
version: 0.1.0
appVersion: "1.16.0"

2.ceph的命名和这个很相似可借鉴一下。我的命名规则就参考了ceph

  • x.0.y: 代表的是内部测试alpha版本

  • x.1.y:代表的是beta版本,外部人员勇敢者可以尝试

  • x.2.y:代表的是Stable版本,外部人员可以在生产环境中使用

修改Chart的元数据为自定义;

[root@master23105-helm]# yy 01-zhiyong18-no-value/Chart.yaml 
apiVersion: v2
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
type: application
version: "0.2.2"
appVersion: "1.16.0"

3.验证版本确实指定是 应用程序的版本

[root@master23105-helm]# helm list | awk '{print $NF}'
VERSION
1.16.0
自定义release帮助信息

1.删除之前的helm,增加文件,内容如下

[root@master23105-helm]# cat 01-zhiyong18-no-value/templates/NOTES.txt
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: {{.Chart.Name}}:{{.Chart.Version}}
正在使用的 应用 版本号为: {{.Chart.Name}}:{{.Chart.AppVersion}}
当前的release名称: {{.Release.Name}}
名称空间: {{.Release.Namespace}}
修订版本: {{.Release.Revision}}
当前操作是否升级: {{.Release.IsUpgrade}}

我的博客地址:https://blog.youkuaiyun.com/qq_73797346

2.安装部署helm应用时,可以看到提示

[root@master23105-helm]# helm install xiuxian 01-zhiyong18-no-value/
NAME: xiuxian
LAST DEPLOYED: Sat Nov 23 15:05:27 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: 01-zhiyong18-no-value:0.2.2
正在使用的 应用 版本号为: 01-zhiyong18-no-value:1.16.0
当前的release名称: xiuxian
名称空间: default
修订版本: 1
当前操作是否升级: false

我的博客地址:https://blog.youkuaiyun.com/qq_73797346
创建Chart基于自定义values

都是使用默认的value,很明显不能满足自己的需求,可以手写一份

1.拷贝之前用过的模板

[root@master23105-helm]# cp -r 01-zhiyong18-no-value 02-zhiyong18-use-value

[root@master23105-helm]# cat 02-zhiyong18-use-value/Chart.yaml 
apiVersion: v2
name: 01-zhiyong18-no-value
description: A Helm chart for Kubernetes
type: application
version: "0.2.2"
appVersion: "1.16.0"

2.修改values.yaml实现自定义。主要是一些标签信息,探针,svc类型和端口

cat 02-zhiyong18-use-value/values.yaml 
# 定义的是通用的字段
common:
  xiuxian:
    name: xiuxian
    labels:
      apps: xiuxian

# 定义deployment资源的相关字段
deploy:
  xiuxian:
    image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps
    tag: v1
    replicas: 3
    livenessProbe:
      httpGet:
        port: 80
        path: /index.html
      failureThreshold: 3
      initialDelaySeconds: 3
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1
    readinessProbe:
      httpGet:
        port: 80
        path: /index.html
      failureThreshold: 3
      initialDelaySeconds: 0
      periodSeconds: 1
      successThreshold: 1
      timeoutSeconds: 1

# 定义service资源相关字段
service:
  xiuxian:
    type: NodePort
    ports:
      port: 80
      targetPort: 80
      nodePort: 3080

3.创建控制器模版文件,里面全是在引用 values 里边的内容

cat 02-zhiyong18-use-value/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{.Values.common.xiuxian.name}}
spec:
  replicas: {{.Values.deploy.xiuxian.replicas}}
  selector:
    matchLabels:
      apps: xiuxian
  template:
    metadata:
      labels:
        apps: xiuxian
        version: v1
    spec:
       containers:
       - name: c1
         image: "{{.Values.deploy.xiuxian.image}}:{{.Values.deploy.xiuxian.tag}}"

4.创建svc模版

cat 02-zhiyong18-use-value/templates/service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: {{.Values.common.xiuxian.name}}
spec:
  type: {{.Values.service.xiuxian.type}}
  selector:
    apps: xiuxian
  ports:
  - port: {{.Values.service.xiuxian.ports.port}}
    targetPort: {{.Values.service.xiuxian.ports.targetPort}}
    nodePort: {{.Values.service.xiuxian.ports.nodePort}}

5.自定义帮助信息

[root@master23105-helm]# cat 02-zhiyong18-use-value/templates/NOTES.txt
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: {{.Chart.Name}}:{{.Chart.Version}}
正在使用的 应用 版本号为: {{.Chart.Name}}:{{.Chart.AppVersion}}
当前的release名称: {{.Release.Name}}
名称空间: {{.Release.Namespace}}
修订版本: {{.Release.Revision}}
当前操作是否升级: {{.Release.IsUpgrade}}
当前部署的镜像为: {{.Values.deploy.xiuxian.image}}:{{.Values.deploy.xiuxian.tag}}
访问测试: http://10.0.0.231:{{.Values.service.xiuxian.ports.nodePort}}

我的博客地址:https://blog.youkuaiyun.com/qq_73797346

6.部署

[root@master23105-helm]# helm install 02-values 02-zhiyong18-use-value/
NAME: 02-values
LAST DEPLOYED: Sat Nov 23 15:44:59 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
欢迎使用wzy自定义Chart程序,当前的Chart版本号是: 01-zhiyong18-no-value:0.2.2
正在使用的 应用 版本号为: 01-zhiyong18-no-value:1.16.0
当前的release名称: 02-values
名称空间: default
修订版本: 1
当前操作是否升级: false
当前部署的镜像为: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
访问测试: http://10.0.0.231:3080

我的博客地址:https://blog.youkuaiyun.com/qq_73797346
[root@master23105-helm]# kubectl get all
NAME                                          READY   STATUS    RESTARTS   AGE
pod/xiuxian-568cf47956-4j9d8                  1/1     Running   0          37s
pod/xiuxian-568cf47956-5b42g                  1/1     Running   0          37s
pod/xiuxian-568cf47956-hr4sd                  1/1     Running   0          37s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)       AGE
service/kubernetes   ClusterIP   10.200.0.1       <none>        443/TCP       20d
service/xiuxian      NodePort    10.200.216.115   <none>        80:3080/TCP   37s

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/xiuxian                  3/3     3            3           37s

NAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/xiuxian-568cf47956                  3         3         3       37s

[root@worker232~]# curl -s http://10.0.0.231:3080 | grep color
    <h1 style="color: green">凡人修仙传 v1 </h1>
注释的书写
{{- /* 此行是注释,安装时不会弹出 */}}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值