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的删除
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的基础文件目录:
目录解释:
charts
:空目录,一般不会写什么
Chart.yaml
:chart的基本信息,包括版本名字之类
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
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文件全局变量
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