k8s应用部署之helm初探

目录

1、为什么需要helm?

2、helm介绍

3、helm工作流程

4、使用helm

Helm管理应用生命周期:

helm模板功能试用

helm动态传参使用

helm动态文件传参

helm版本管理

回滚

拓展命令

卸载应用:

附属

服务打包


1、为什么需要helm?

k8s应用部署之helm初探_第1张图片
由于Kubernetes缺少对发布的应用版本管理和控制,使得部署的应
用维护和更新等面临诸多的挑战,主要面临以下问题:
• 如何将这些服务作为一个整体管理?
• 这些资源文件如何高效复用?
• 不支持应用级别的版本管理

2、helm介绍

Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前 打包好的yaml文件部署到kubernetes上。
Helm有3个重要概念:
• helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
• Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
• Release:基于Chart的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个 release;将在
k8s中创建出真实运行的资源对象。
k8s应用部署之helm初探_第2张图片

3、helm工作流程

k8s应用部署之helm初探_第3张图片

4、使用helm

使用helm很简单,你只需要下载一个二进制客户端包即可,会通过kubeconfig配置(通常
$HOME/.kube/config)来连接Kubernetes。
下载Helm客户端:里面包含helm官网
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar zxvf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/

即可安装成功

Helm管理应用生命周期:

• helm create 制作Chart
• helm install 部署
• helm upgrade 更新
• helm rollback 回滚
• helm uninstall 卸载
创建chart:
helm create mychart
打包chart:
helm package mychart
    • Chart.yaml:用于描述这个 Chart的基本信息,包括名字、描述信息以及 版本等。
    • values.yaml :用于存储 templates 目录中模板文件中用到变量的值。
    • charts:目录里存放这个chart依赖的所有子chart。
    • templates: 目录里面存放所有yaml模板文件。
        • NOTES.txt :用于介绍Chart帮助信息, helm install 部署后展示给 用户。例如:如何使用这个 Chart、列出缺省的设置等。
        • _helpers.tpl:放置模板的地方,可以在整个 chart 中重复使用。
Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改 动的字段进行模板化,可动态传入
示例
创建一个chart
helm create my-chart
进入这个chart
cd my-chart/
结构如下
创建一个测试chart文件夹
mkdir chart-demo
cd chart-demo
k8s应用部署之helm初探_第4张图片
新建一个Chart文件
vi Chart.yaml
apiVersion: v2
name: chart-demo
description: A Helm chart for Kubernetes
type: application
version: 0.1.0 # chart的版本号
appVersion: 1.0.0 #chart应用默认的版本
保存
新建一个values.yaml
touch values.yaml
新建一个templates目录
mkdir templates
进入templates目录
cd templates
新建一个deployment.yaml
vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
保存
新建一个service.yaml
vi service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  ports:
  - name: 80-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
  type: NodePort
保存
新建一个NOTES.txt
vi NOTES.txt
随便写入一些内容,保存
新建一个_helpers.tpl
touch _helpers.tpl
新建一个templates目录
mkdir templates
此时chart_demo目录结构如下
k8s应用部署之helm初探_第5张图片
安装tree工具查看目录结构
yum install tree -y
tree .
k8s应用部署之helm初探_第6张图片
部署这个chart
helm install web /root/chart-demo/
k8s应用部署之helm初探_第7张图片
命令查看可以看到已经部署成功
helm list
k8s应用部署之helm初探_第8张图片

helm模板功能试用

Helm核心是模板,即模板化K8s YAML文件。部署多个应用时,将需要改 动的字段进行模板化,可动态传入 
例如,现在要部署一个普通应用,它包含deployment.yaml与service.yaml
可以先将他的变量单独存入values文件中
k8s应用部署之helm初探_第9张图片
vi values.yaml
#这里定义默认变量
name: "web2"
replicas: 1
labels:
  project: demo
  app: nginx
image:
  repository: nginx
  tag: "latest"
service:
  port: 80
  targetport: 80
  type: ClusterIP
这样,将常用参数存入values
在deployment.yaml和service.yaml中只需要引用这些参数即可,如下
k8s应用部署之helm初探_第10张图片
引用方式如下
vi deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      project: {{ .Values.labels.project }}
      app: {{ .Values.labels.app }}
  strategy: {}
  template:
    metadata:
      labels:
        project: {{ .Values.labels.project }}
        app: {{ .Values.labels.app }}
    spec:
      containers:
      - image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        name: web
        resources: {}
vi service.yaml
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.name }}
spec:
  ports:
  - name: 80-80
    port: {{ .Values.service.port }}
    protocol: TCP
    targetPort: {{ .Values.service.targetport }}
  selector:
    project: {{ .Values.labels.project }}
    app: {{ .Values.labels.app }}
  type: {{ .Values.service.type }}
执行可以创建成功
helm install web2 /root/chart-demo/
k8s应用部署之helm初探_第11张图片
注意:在执行部署命令后面加--dry-run即可看到渲染效果而不执行部署,如下
helm install web2 /root/chart-demo/ --dry-run
k8s应用部署之helm初探_第12张图片

helm动态传参使用

helm除了支持参数在values传递,还支持动态传参,如下
这个命令即可动态覆盖传输,修改原chart里面的值
helm install web3 /root/chart-demo/ --set name="web3" --set image.repository=httpd --set labels.app=httpd
k8s应用部署之helm初探_第13张图片
对应的都动态渲染了
k8s应用部署之helm初探_第14张图片

helm动态文件传参

heml在执行时会默认读取values里面的参数,可以直接引用valus里面的参数部署项目。同时,也可以在执行命令后加--set来动态渲染,覆盖values的参数,,,同时,helm也支持将动态参数都写入一个新的文件,在执行helm时指向这个文件,他会覆盖values内的参数,如下
新建一个abc.yaml的demo
vi abc.yaml
name: "web5"
replicas: 3
labels:
  app: nginx
image:
  repository: nginx
  tag: "1.16"
service:
  type: NodePort
保存
在执行helm部署的时候引用这个文件
helm install web5 /root/chart-demo/ --set name="web4" -f abc.yaml
k8s应用部署之helm初探_第15张图片
成功
k8s应用部署之helm初探_第16张图片
k8s应用部署之helm初探_第17张图片

helm版本管理

升级
更新,例如将abc.yaml中的镜像版本由1.16升级为1.17
vi abc.yaml
name: "web6"
replicas: 3
labels:
  project: ms
  app: nginx
image:
  repository: nginx
  tag: "1.17"
service:
  type: NodePort
将先前的install换成upgrade就是升级操作, 他要对已经存在的chart进行升级
helm upgrade web6 /root/chart-demo/ -f abc.yaml
通过
helm list
可以看到web6现在有两个版本
k8s应用部署之helm初探_第18张图片
通过
helm history web6
可以看到web6过去的版本

回滚

helm与普通的deployment回滚最大区别是,helm是应用级别的,他是对整个应用的yaml进行操作,

拓展命令

回滚到上一个版本:
helm rollback web

查看历史版本:
helm history web

回滚到指定版本:
helm rollback web 2
卸载应用:
helm uninstall web
如例,这就是回滚到最开始的版本,服务名后面跟的数字就是版本号
k8s应用部署之helm初探_第19张图片
可以看到。再看web6的历史版本后,会新出一个版本,后面显示是回滚到1版本
k8s应用部署之helm初探_第20张图片

卸载应用:

和回滚一样,helm卸载也是应用级别的,不需要一个个服务删除,
卸载命令 
helm uninstall xxx
例如,这就是将其他pod删除
k8s应用部署之helm初探_第21张图片

附属

helm更新时可以添加description来备注信息,如例
查看详细信息的时候可以看到description变成了我们自定义的信息,如下
helm install web7 /root/chart-demo/ --description="nginx:1.17"
k8s应用部署之helm初探_第22张图片

服务打包

helm的chart可以直接打包并复用,如下
chart-demo是我自建的chart
k8s应用部署之helm初探_第23张图片
通过命令将其打包
helm package chart-demo/
k8s应用部署之helm初探_第24张图片
且这个包可以直接使用不需要解压( 此处加了set变量是因为原chart在这个环境已经运行中,name冲突
k8s应用部署之helm初探_第25张图片

你可能感兴趣的:(helm,kubernetes,linux,容器,运维开发,devops)