十八,helm的原理及基础使用
helm介绍
helm把一系列复杂的有状态和无状态服务的部署封装起来(实际上就是对yaml文件的组织),然后你可以暴露出一些自定义参数信息供用户选择,这样部署就会变得简单很多.
核心术语
- Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
- Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart和Config 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
- Chart :一个Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件
- Repoistory: Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
- Release 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release
组成示意图
helm安装
helm安装
wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz
tar xf helm-v2.14.3-linux-amd64.tar.gz
cd linux-amd64 #进入解压目录会看到两个可执行文件helm和tiller, 若采用容器化部署到kubernetes中,则可以不用管tiller,只需将helm复制到/usr/bin目录即可
cp helm /usr/bin/
echo "source <(helm completion bash)" >> /root/.bashrc # 命令自动补全
Tiller安装
创建tiller相关的rbac
[root@master helm]# vim helm-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
[root@master helm]# kubectl apply -f helm-rbac.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
因为墙, 所以指定国内tiller镜像, tiller标签和helm保持一致, 这里是v2.14.3
kubectl get pods -n kube-system -l app=helm
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
初始化后通过命令查看tiller pod创建情况
helm使用
添加chart源
由于阿里的chart源可能更新不及时, 会比较老, 所以建议替换为默认源或者微软的azure源
参考链接: https://github.com/BurdenBear/kube-charts-mirror
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator/
helm常用命令:
release管理:
install:创建一个release,下载的压缩文件默认存放路径为/$HOME/.helm/cache/archive/
delete
upgrade/rollback
list
history:release的历史信息;
status:获取release状态信息;
chart管理:
create
fetch :远程获取并展开
get
inspect :查看chart详细信息
package:打包chart文件
verify:校验
基础命令
命令 | 作用 |
---|---|
搜索chart | helm search CHARTNAME |
查看chart详细信息 | helm inspect CHARTNAME |
安装 | helm install --name mem1(指定别名) stable/redis --values valueFiles |
获取状态信息 | helm status mem1 |
列出release | helm list [-a] |
删除release | helm delete [--purge] mem1 |
下载chart | helm fetch stable/redis |
创建chart | helm create CHARTNAME |
语法检测 | helm lint CHARTNAME |
打包 | helm package CHARTNAME |
自定义chart
一、chart的结构
(1)更改helm为阿里云仓库源
[root@master helm]# helm repo remove stable
"stable" has been removed from your repositories
[root@master helm]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"stable" has been added to your repositories
[root@master helm]# helm repo list
NAME URL
local http://127.0.0.1:8879/charts
incubator https://kubernetes-charts-incubator.storage.googleapis.com/
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#更新
[root@master helm]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
(2)
[root@master helm]# pwd
/root/manifests/helm
[root@master helm]# helm fetch stable/redis #获取chart,会得到一个压缩包
[root@master helm]# tar zxf redis-6.4.3.tgz
[root@master helm]# ls
redis redis-6.4.3.tgz tiller-rbac.yaml
#chart目录结构
[root@master helm]# tree redis
redis
├── Chart.yaml #chart元数据描述信息(关键词,版本等...)
├── ci
│ ├── default-values.yaml
│ ├── dev-values.yaml
│ ├── production-values.yaml
│ ├── redisgraph-module-values.yaml
│ └── redis-lib-values.yaml
├── README.md #该chart的简介,可选文件
├── templates #资源定义清单模板文件
│ ├── configmap.yaml
│ ├── health-configmap.yaml
│ ├── _helpers.tpl
│ ├── metrics-deployment.yaml
│ ├── metrics-prometheus.yaml
│ ├── metrics-svc.yaml
│ ├── networkpolicy.yaml
│ ├── NOTES.txt
│ ├── redis-master-statefulset.yaml
│ ├── redis-master-svc.yaml
│ ├── redis-rolebinding.yaml
│ ├── redis-role.yaml
│ ├── redis-serviceaccount.yaml
│ ├── redis-slave-deployment.yaml
│ ├── redis-slave-svc.yaml
│ └── secret.yaml
├── values-production.yaml
└── values.yaml #为 templates中的资源定义清单设置自定义属性值
#其他目录结构
requirements.yaml #当前chart是否依赖其他chart,这个文件是可选的。
charts/ #里面放置的是当前chart所要依赖的其他chart,这个是可选的。
#可以通过chart官方手册,来了解以上每项的详细含义:
https://docs.helm.sh/developing_charts/#charts
二、用helm生成基础chart示例性文件
(1)
[root@master helm]# helm create myapp #创建myapp,自动生成chart基础目录结构
Creating myapp
[root@master helm]# ls |grep myapp
myapp
[root@master helm]# tree myapp/
myapp/
├── charts
├── Chart.yaml
├── templates #go模板语法
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml
[root@master myapp]# vim Chart.yaml #自定义Chart.yaml
apiVersion: v1
appVersion: "1.0"
scription: A Helm chart for Kubernetes myapp
name: myapp
version: 0.0.1
maintainer:
name: li
email: ll@163.com
url: www.beijing.club
[root@master myapp]# vim requirements.yaml
#自定义依赖的chart,定义chart的name,version,来自哪个仓库等,该步骤为可选步骤
[root@master myapp]# cd templates/
[root@master templates]# tree ../templates/
../templates/
├── deployment.yaml
├── _helpers.tpl
├── ingress.yaml
├── NOTES.txt #提供给用户的提示信息
├── service.yaml
└── tests
└── test-connection.yaml
#可以自己修改每个文件里的值,然后做语法检查
[root@master helm]# helm lint myapp #语法检查,注意执行的目录,需要在myapp的上级目录
==> Linting myapp
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, no failures
#打包
[root@master helm]# helm package myapp/ #打包chart
Successfully packaged chart and saved it to: /root/manifests/helm/myapp-0.0.1.tgz
[root@master helm]# ls |grep myapp
myapp
myapp-0.0.1.tgz
(2)启动本地仓库,并应用
[root@master helm]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts #通过本机的8878端口获取
#启动本地仓库
[root@master helm]# helm serve #启动8878端口
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879
#查看,可见myapp已经自动保存在仓库中了
[root@master ~]# helm search myapp
NAME CHART VERSION APP VERSION DESCRIPTION
local/myapp 0.0.1 1.0 A Helm chart for Kubernetes myapp chart
#如果定义的没问题,就可以部署了
[root@master ~]# helm install --name myapp1 local/myapp
#查看当前Release的状态信息
[root@node1 ~]# helm status myapp1
#当前Release
[root@master ~]# helm delete --purge myapp1 # --purge 移除并释放该名称,后续还可继续使用myapp1名称
十八,helm的原理及基础使用的更多相关文章
- 四十八.监控概述 、 Zabbix基础 、 Zabbix监控服务
1.常用系统监控命令 查看内存信息 查看交换分区信息 查看磁盘信息 查看CPU信息 查看网卡信息 查看端口信息 查看网络连接信息 一般企业做监控的目的:实时报告系统状态,提前发现系统的问题. 监 ...
- Selenium系列(十八) - Web UI 自动化基础实战(5)
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除
目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- 最全的MySQL基础【燕十八传世】
1.课前准备! 开启mysql服务:1).配置环境变量;2).net start mysql 将该sql文件导入到你的数据库中,以下所有操作都是基于该数据库表操作的!!! [此笔记是本人看着视频加上自 ...
- linux基础-第十四单元 Linux网络原理及基础设置
第十四单元 Linux网络原理及基础设置 三种网卡模式图 使用ifconfig命令来维护网络 ifconfig命令的功能 ifconfig命令的用法举例 使用ifup和ifdown命令启动和停止网卡 ...
- MyBatis基础入门《十八》动态SQL(if-where)
MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
随机推荐
- postman使用当前时间戳
//设置当前时间戳postman.setGlobalVariable(“time”,Math.round(new Date().getTime()));time = postman.getGlobal ...
- idea调试jdk1.8源码(最新)
我们发现如果,直接用idea点项目jdk源码进去后发现自己不能注释说明,非常麻烦,不便阅读记录 于是: 1.在安装的jdk1.8路径下,找到src.zip和javafx-src.zip压缩文件 ,解压 ...
- [Paper Reading] Show and Tell: A Neural Image Caption Generator
论文链接:https://arxiv.org/pdf/1411.4555.pdf 代码链接:https://github.com/karpathy/neuraltalk & https://g ...
- 如何通过Exchange2010 OWA更改过期密码
很多Exchange 2003管理员都通过IISADMPWD虚拟目录为员工提供用户密码修改功能,这大大方便了移动用户和非加入域用户在密码到期时的更改操作.您也许已经注意到:Windows Server ...
- 最新 搜狐java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.搜狐等10家互联网公司的校招Offer,因为某些自身原因最终选择了搜狐.6.7月主要是做系统复习.项目复盘.LeetCode ...
- 32.网络编程TCP/UDP服务
网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...
- 《C专家编程》读书笔记之第1~4章
一.C:穿越时空的迷雾 1. C标准中定义了描述编译器的特点的一些术语: (1) 由编译器定义的(imprementation-defined) 由编译器设计者决定如何处理.例如:整型数右移时要不要扩 ...
- python搞搞大数据之hbase——初探
使用python链接mysql读入一个表并把它再写到hbase 里去(九头蛇万岁) 先声明一下需要用的库: 俩!!: happybase (写这个的老哥真的happy) pymysql 建议使用 ...
- jupyter lab 的基本使用
在创建一个文件即可 进入创建的文件,在创建一个ipynb文件即可操作 注意右上角必须是python3 可以哦(如果点了shutdown 就会没有内核 需要自己在定义python编辑器) jupyter ...
- 在win下开发的项目怎么迁移到linux下面才能正常运行?
我可以直接拷贝项目目录到linux下面直接操作吗? 答案: 可以,咋可能??? 为啥??? win开发直接拷贝过去,你不凉谁凉了,我以前也同样的单纯,如果你项目里用的绝对路径! 那恭喜你,你凉了,清楚 ...