Helm架构

图片来自IBM Developer Blog。

部署Helm
本文只展示二进制方式安装,其他方式可查看官方文档。

下载安装包

K8S Master1节点上

[root@K8S-PROD-M1 workspace]# wget https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gz
解压安装包
[root@K8S-PROD-M1 workspace]# tar -zxvf helm-v3.4.1-linux-amd64.tar.gz
[root@K8S-PROD-M1 workspace]# mv linux-amd64/helm /usr/local/bin/helm
与K8S 交互
采用与执行kubectl命令时的与K8S集群进行交互的配置文件:/root/.kube/config。

Chart仓库操作
常用仓库:

  • gitlab:https://charts.gitlab.io

  • harbor:https://helm.goharbor.io

  • elastic:https://helm.elastic.com

  • bitnami:https://charts.bitnami.com/bitnami

  • brigade:https://brigadecore.github.io/charts

  • 官方仓库:https://kubernetes-charts.storage.googleapis.com

  • 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

仓库操作:

添加仓库

[root@K8S-PROD-M1 ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@K8S-PROD-M1 ~]# helm repo add brigade https://brigadecore.github.io/charts
[root@K8S-PROD-M1 ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
[root@K8S-PROD-M1 ~]# helm repo add harbor https://helm.goharbor.io

更新苍鹭

[root@K8S-PROD-M1 ~]# helm repo update

搜索仓库

[root@K8S-PROD-M1 ~]# helm repo list
[root@K8S-PROD-M1 ~]# helm search repo stable
[root@K8S-PROD-M1 ~]# helm search repo brigade

删除仓库

[root@K8S-PROD-M1 ~]# helm repo remove aliyun

可搜索全部可用chart

[root@K8S-PROD-M1 ~]# helm search hub
[root@K8S-PROD-M1 ~]# helm search hub wordpress
其他命令

  • 查看配置

heml env

  • 查看帮助

helm help

常用选项

  • 模拟安装

--dry-run

  • 生成release名称

-g, --generate-name

  • 跳过命令行的运行钩子

--no-hooks

测试Helm
安装应用

查找确认存在

[root@K8S-PROD-M1 ~]# helm search repo nginx

安装repo期间,helm客户端将显示有关创建了哪些资源,发布状态是什么以及是否可以或应该执行其他配置步骤的有用信息。

由于许多chart需要较大的镜像,需要一定时间才能正确部署至集群,Helm不会等到所有资源都在运行后才退出。

默认安装的namespace是:default, 也可通過-n明確指定。

以repo中chart安装

[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami/nginx

以压缩包中chart安装

[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami.nginx.tgz

以解压后的目录安装

[root@K8S-PROD-M1 ~]# helm install my-nginx bitnami/nginx/

指定变量

[root@K8S-PROD-M1 ~]# helm install --set name=prod my-nginx bitnami/nginx/

指定变量的值为string类型

[root@K8S-PROD-M1 ~]# helm install --set-string long_int=123 my-nginx bitnami/nginx/

指定引用的文件地址

[root@K8S-PROD-M1 ~]# helm install --set-file my_script=dothings.sh my-nginx bitnami/nginx/

同时指定多个变量

[root@K8S-PROD-M1 ~]# helm install --set foo=bar --set bar=foo my-nginx bitnami/nginx/

查看已安装的release

[root@K8S-PROD-M1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2020-11-30 15:29:44.362452632 +0800 CST deployed nginx-8.2.0 1.19.5

状态查看

[root@K8S-PROD-M1 ~]# helm status my-nginx
NAME: my-nginx
LAST DEPLOYED: Mon Nov 30 15:29:44 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
...

查看安装历史

[root@K8S-PROD-M1 ~]# helm history my-nginx
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Mon Nov 30 15:29:44 2020 deployed nginx-8.2.0 1.19.5 Install complete

回滚指定历史版本

[root@K8S-PROD-M1 ~]# helm rollback my-nginx 1

Helm3中,删除release也会删除发布记录。如果希望保留删除发布记录,可使用helm uninstall --keep-history。

使用helm list --uninstalled将仅显示带有--keep-history标志卸载的发行版。

卸载release

[root@K8S-PROD-M1 ~]# helm uninstall my-nginx

查看所有Release

[root@K8S-PROD-M1 ~]# helm list --all
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2020-11-30 15:29:44.362452632 +0800 CST uninstalled nginx-8.2.0 1.19.5

卸载应用,不保留安装记录

[root@K8S-PROD-M1 ~]# helm delete my-nginx
release "my-nginx" uninstalled
自定义参数安装应用
Helm 中支持使用自定义yaml文件和 --set命令参数对要安装的应用进行参数配置,首先查看可配置参数:

查看可配置参数

[root@K8S-PROD-M1 ~]# helm show values bitnami/nginx
使用自定义values.yaml文件安装应用

创建自定义配置文件: values.yaml

[root@K8S-PROD-M1 nginx]# cat > values.yaml << EOF
image:
registry: docker.io
repository: bitnami/nginx
resources:
limits:
cpu: 1000m
memory: 512Mi
requests:
cpu: 1000m
memory: 512Mi
EOF

使用自定义配置文件运行应用

helm install -f values.yaml bitnami/nginx
使用--set配置参数进行安装应用
--set参数是在使用helm命令时候添加的参数,可以在执行helm安装与更新应用时使用,多个参数间用”,“隔开。

如果配置文件和--set同时使用,则--set设置的参数会覆盖配置文件中的参数配置。

对于--set配置参数,Helm官方对于不同的配置类型给出了不同的写法,如下:

[root@K8S-PROD-M1 nginx]# helm install --set 'registry.registry=docker.io,registry.repository=bitnami/nginx' bitnami/nginx
升级应用

创建新的配置参数文件values.yaml

[root@K8S-PROD-M1 nginx]# cat > values.yaml << EOF
service.type: NodePort
service.nodePorts.http: 30002
EOF

应用更新

[root@K8S-PROD-M1 nginx]# helm upgrade -f values.yaml my-nginx bitnami/nginx -n default

查看新配置是否生效

[root@K8S-PROD-M1 nginx]# helm get values my-nginx
渲染模板
查看通过指定的参数渲染的Kubernetes部署资源模板:

[root@K8S-PROD-M1 ~]# helm template bitnami/nginx
开发Chart
创建chart
[root@K8S-PROD-M1 ~]# mkdir -p /root/workspace/helm
[root@K8S-PROD-M1 ~]# cd /root/workspace/helm
[root@K8S-PROD-M1 helm]# helm create chart-demo
[root@K8S-PROD-M1 helm]# tree chart-demo/
chart-demo/
├── charts #该目录保存其他依赖的 chart(子 chart)
├── Chart.yaml
├── templates #chart配置模板,用于渲染最终的Kubernetes YAML文件
│ ├── deployment.yaml #Kubernetes deployment 配置
│ ├── _helpers.tpl #用于创建模板时的帮助类
│ ├── hpa.yaml
│ ├── ingress.yaml #Kubernetes ingress配置
│ ├── NOTES.txt #用户运行helm install时候的提示信息
│ ├── serviceaccount.yaml #Kubernetes serviceaccount配置
│ ├── service.yaml #Kubernetes service配置
│ └── tests
│ └── test-connection.yaml
└── values.yaml # 定义chart模板中的自定义配置的默认值,可以在执行helm install或helm update的时候覆盖

3 directories, 10 files
修改Chart
上一步创建的是一个标准的chart目录结构,可以编辑相应配置从而创建自己的chart。

验证创建后是否正常

[root@K8S-PROD-M1 helm]# helm lint chart-demo/
==> Linting chart-demo/
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

将创建的进行打包

[root@K8S-PROD-M1 helm]# helm package chart-demo/
Successfully packaged chart and saved it to: /root/workspace/helm/chart-demo-0.1.0.tgz

©著作权归作者所有:来自51CTO博客作者mob604756e9d3bc的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. K8S v1.18.x 部署-Kubeadm方式-4:部署负载均衡
  2. K8S v1.18.x 部署-Kubeadm方式-3:部署工具
  3. 多厂商***系列之十二:ASA Dynamic site-to-site IPSec ***
  4. 多厂商***系列之十五:华为USG防火墙实现IPSEC ***的实验【模拟器
  5. 使用RBAC在Kubernetes中配置权限
  6. CentOS 7部署OpenStack--准备基础环境
  7. sh nginx 虚拟主机安装卸载
  8. Kibana的安装及配置应用
  9. CentOS 7部署OpenStack--部署Newtron

随机推荐

  1. Visual C++2010如何编写并运行C++程序
  2. go 为什么比php性能高
  3. aspx是什么文件?
  4. C语言中数组所占字节怎么算
  5. gin是什么意思?
  6. c语言中undeclared identifier是什么意思
  7. C++如何给二维数组初始化
  8. 什么是Go语言?Go语言的优缺点介绍
  9. 一个c程序的执行是从哪里开始到哪里结束
  10. devc++怎么改成中文