k8s-helm-v3版本使用

  • 一、Helm介绍
  • 二、Helmv3变化
  • 三、安装Helm
  • 四、Helm的基本使用
  • 五、创建自己的chart
  • 5.1使用命令创建自己的chart
  • 5.2在templates文件创建两个yaml文件
  • 5.3安装chart:
  • 5.4 chart升级
  • 六、实现yaml高效复用
  • 6.1在values.yaml定义变量和值
  • 6.2在具体yaml文件定义变量值
  • 6.3部署:


一、Helm介绍

Helm是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。

Helm有3个重要概念:
(1)helm:一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
(2)Chart:应用描述,一系列用于描述k8s资源相关文件的集合。
(3)Release:基于Chart的部署实体,一个chart被Helm运行后将会生成对应的一个release;将在k8s中创建出真实运行的资源对象。

二、Helmv3变化

2019年11月13日,Helm团队发布Helmv3的第一个稳定版本。

该版本主要变化如下:

架构变化:

1、最明显的变化是Tiller的删除

helm 更新configmap_helm 更新configmap


2、Release名称可以在不同命名空间重用

3、支持将Chart推送至Docker镜像仓库中

4、使用JSONSchema验证chartvalues

三、安装Helm

Helm客户端官网安装地址:https://helm.sh/zh/docs/intro/install/

wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz
tar -xf helm-v3.4.0-linux-amd64.tar.gz
mv linux-amd64/helm/usr/bin/

Helm常用命令:

命令

描述

create

创建一个chart并指定名字

dependency

管理chart依赖

get

下载一个release。可用子命令:all、hooks、manifest、notes、values

history

获取release历史

install

安装一个chart

list

列出release

package

将chart目录打包到chart存档文件中

pull

从远程仓库中下载chart并解压到本地#helmpullstable/mysql–untar

repo

添加,列出,移除,更新和索引chart仓库。可用子命令:add、index、list、remove、update

rollback

从之前版本回滚

search

根据关键字搜索chart。可用子命令:hub、repo

show

查看chart详细信息。可用子命令:all、chart、readme、values

status

显示已命名版本的状态

template

本地呈现模板

uninstall

卸载一个release

upgrade

更新一个release

version

查看helm客户端版本

配置国内chart仓库

  • 微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的chart这里都有。
  • 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)
  • 官方仓库(https://hub.kubeapps.com/charts/incubator)官方chart仓库,国内有点不好使。
    添加存储库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

查看配置的存储库

helm repo list
helm search repo stable

删除存储库:

helm repo remove aliyun

四、Helm的基本使用

主要介绍三个命令:

  • chart install
  • chart upgrade
  • chart rollback

4.1使用chart部署一个应用

查找chart:

[root@master ~]# helm search repo weave
NAME              	CHART VERSION	APP VERSION	DESCRIPTION                                       
aliyun/weave-cloud	0.1.2        	           	Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope	0.9.2        	1.6.5      	A Helm chart for the Weave Scope cluster visual...
stable/weave-cloud	0.3.9        	1.4.0      	DEPRECATED - Weave Cloud is a add-on to Kuberne...
stable/weave-scope	1.1.12       	1.12.0     	DEPRECATED - A Helm chart for the Weave Scope c...

查看chart信息:

helm show chart stable/mysql

安装包:

helm install ui stable/weave-scope

查看发布状态:

helm list
helm status ui

五、创建自己的chart

5.1使用命令创建自己的chart

helm create chart 名称

[root@master helm]# helm create mychart
Creating mychart

此时会在当前目录下创建mychart的基础文件目录:

helm 更新configmap_全局变量_02


目录解释:

charts:空目录,一般不会写什么

Chart.yaml:chart的基本信息,包括版本名字之类

helm 更新configmap_nginx_03


templates:存放yaml文件

[root@master mychart]# ls templates
deployment.yaml  _helpers.tpl  hpa.yaml  ingress.yaml  NOTES.txt  serviceaccount.yaml  service.yaml  tests

因为我们是自己写,可以把templates文件下的文件删除
values.yaml:存放全局变量,templates下的文件可以调用

5.2在templates文件创建两个yaml文件

cd templates
rm -rf *
kubectl create deployment web1 --image=nginx --dry-run -o yaml >deployment.yaml
kubectl create deployment web1 --image=nginx
kubectl expose deployment web1 --port=80 --target-port=80 --type-NodePort --dry-run -o yaml >service.yaml

这是此目录下会有deployment.yaml、service.yaml两个文件

[root@master templates]# ls
deployment.yaml  service.yaml

删掉deployment的web1

kubectl delete deployments.apps web1

5.3安装chart:

进入mychart的上级目录:

cd ../..

[root@master helm]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sat Dec 19 15:48:19 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

查看pod.deployment,svc

helm 更新configmap_nginx_04

5.4 chart升级

helm upgrade chart 名称 目录

[root@master helm]# helm upgrade web1 mycahrt/
Error: failed to download "mycahrt/" (hint: running `helm repo update` may help)
[root@master helm]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sat Dec 19 15:54:30 2020
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: Non

六、实现yaml高效复用

通过传递村塾,动态渲染模板,yaml内容动态传入参数生成。

在chart有values。yaml文件,定义yaml文件全局变量

helm 更新configmap_nginx_05

6.1在values.yaml定义变量和值

yaml文件答题有几个地方不同的
1.image
2.tag
3.label
4.port
5.replicas
在templates的yaml文件使用values.yaml定义变量
通过表达式形式使用全局变量:{{ .Values.变量 }}
{{ .Release.Name }}取到当前版本的名称
修改添加如下:

replicas: 1
image: nginx
tag: 1.19
label: nginx
port: 80

6.2在具体yaml文件定义变量值

修改deployment:

[root@master helm]# cat mychart/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: {{ .Release.Name}}-deploy
spec:
  replicas: {{ .Values.replicas}}
  selector:
    matchLabels:
      app: {{ .Values.label}}
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: {{ .Values.label}}
    spec:
      containers:
      - image: {{ .Values.image}}
        name: nginx
        resources: {}
status: {}

修改svc:

[root@master helm]# cat mychart/templates/service.yaml 
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: {{ .Values.label}}
  name: {{ .Release.Name}}
spec:
  ports:
  - port: {{ .Values.port}}
    protocol: TCP
    targetPort: {{ .Values.port}}
  selector:
    app: {{ .Values.label}}                                                                                                                                                                                                         
  type: NodePort
status:
  loadBalancer: {}

查看是否能生成yaml文件:

[root@master helm]# helm install --dry-run web3 mychart/
NAME: web3
LAST DEPLOYED: Sat Dec 19 16:57:17 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: web3
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx                                                                                                                                                                                                         
  type: NodePort
status:
  loadBalancer: {}
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  name: web3-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

6.3部署:

[root@master helm]# helm install  web3 mychart/
NAME: web3
LAST DEPLOYED: Sat Dec 19 16:51:45 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

查看是否生成port、deployment、svc helm

helm 更新configmap_linux_06


helm 更新configmap_helm 更新configmap_07