k8s-helm-v3版本使用

一、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的删除
在这里插入图片描述
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/
123

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
123

查看配置的存储库

helm repo list
helm search repo stable
12

删除存储库:

helm repo remove aliyun
1

四、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...
123456

查看chart信息:

$ helm show chart stable/mysql

安装包:

$ helm install ui stable/weave-scope

查看发布状态:

$ helm list
$ helm status ui 

五、创建自己的chart

5.1使用命令创建自己的chart

$ helm create chart 名称
$ helm create mychart
Creating mychart 

此时会在当前目录下创建mychart的基础文件目录:
在这里插入图片描述
目录解释:
charts:空目录,一般不会写什么
Chart.yaml:chart的基本信息,包括版本名字之类
在这里插入图片描述
templates:存放yaml文件

$ 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两个文件

$ ls
deployment.yaml  service.yaml

删掉deployment的web1

$ kubectl delete deployments.apps web1 

5.3安装chart:

进入mychart的上级目录:

$ cd ../..

$ helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sat Dec 19 15:48:19 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
123456789

查看pod.deployment,svc
在这里插入图片描述

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
12345678910

六、实现yaml高效复用

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

在chart有values。yaml文件,定义yaml文件全局变量
在这里插入图片描述

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
12345

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: {}
1234567891011121314151617181920212223

修改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: {}
123456789101112131415161718

查看是否能生成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: {}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

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
1234567

查看是否生成port、deployment、svc helm
在这里插入图片描述
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐