k8s学习——Helm入门及使用
前言:
Helm是go语言编写的,是管理kubernetes集群中应用程序包的客户端工具
Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具
对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库
对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在Kubernets上安装需要的应用
除此之外,Helm还提供了Kubernetes上的软件部署,删除,升级,回滚应用的强大功能
Helm中并不提供镜像,但资源清单中会指明相关的镜像仓库
一、基本概念
1、Helm的三个基本概念
Chart:Helm应用(package),包括对资源的定义及相关镜像的引用,还有模板文件、values文件等。类似于YUM RPM或Apt dpkg文件
Repository:Chart仓库,http/https服务器,Chart的程序包放在这里
Release:chart的部署实例,每个Chart可以部署一个或多个release
2、Helm的程序架构
helm:客户端,管理本地的Charts、reprepository和release。与Tiller服务器交互,发送Chart,实例安装、查询、添加、卸载等操作。
可以运行在集群外的主机上。
基于grpc协议与Tiller通信。(使用kubectl port-forward将tiller的端口映射到本地,然后再通过映射后的端口跟tiller通信)
并由tiller来管理对应的Kubernetes资源,Helm客户端的使用方法参见helm --hepl命令。
Tiller:服务端,Tiller多数运行在集群内。接收来自Helm客户端的请求,并把相关资源的操作发送到kube-apiserver,生成release。
为了方便管理,tiller把release的相关信息保存在Kubernetes的ConfigMap中。tiller对外暴露gRPC API,供helm客户端调用。
3、工作流程
首先helm把需要的应用程序包Chart从repository仓库下载到本地。若需要定制化操作,则需修改模板文件和values文件,使用模板文件和values文件对配置清单进行赋值。
helm把清单提交给Tiller,Tiller接收到请求后链接apiserver,通过认证授权,apiserver负责完成创建。
创建完成后,这个运行在集群中的实例不再成作Chart,而被称作release。
helm主机中,helm的家目录下若存在需要的Chart包,则以后再创建时不再从网上拉取Chart包,直接使用本地的Chart包。
二、安装Helm
1、获取helm的安装包:
https://github.com/helm/helm/releases
2、解压二进制包:
tar xf helm-v2.13.1-linux-amd64.tar.gz 你会得到一个linux-amd64的文件目录
3、将linux-amd64里面的可执行文件helm复制到 /usr/bin
cp linux-amd64/helm /usr/bin
4、如果集群基于RBAC认证的话,需要创建serviceaccount,并绑定到集群中合适的角色
vim tiller-rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
应用:kubectl apply -f tiller-rbac.yaml
5、初始化helm
由于tiller的镜像无法直接从国内pull下来,所以这里使用Azure中国的镜像
也可以自己寻找国内的可使用的镜像仓库如:阿里的镜像仓库
注意helm要和tiller版本要保持一致
helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1 Creating /root/.helm/repository/repositories.yaml Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com Adding local repo with URL: http://127.0.0.1:8879/charts $HELM_HOME has been configured at /root/.helm. Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster. Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy. To prevent this, run `helm init` with the --tiller-tls-verify flag. For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation Happy Helming!
6、查看tiller版本及pod是否正常运行:
[root@K8s-master helm]# helm version Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE tiller-deploy-5fcc86f85f-qvr4b 0/1 ContainerCreating 0 31s
三、使用helm
helm官方支持的Chart列表为:https://hub.kubeapps.com/
1、查看当前repo仓库:
helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com ##此仓库地址无法在国内使用,所以我们更换其他国内可使用的仓库。 local http://127.0.0.1:8879/charts
2、删除repo仓库
helm repo remove 仓库名 例:helm repo remove stable
3、添加repo仓库
helm repo add 仓库地址 例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ##阿里云的chart仓库
4、更新仓库
helm repo update Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈
5、搜索Chart:
helm search chart名称 例:helm search wordpress NAME CHART VERSION APP VERSION DESCRIPTION stable/wordpress 0.8.8 4.9.4 Web publishing platform for building blogs and websites.
6、查看chart的详细信息
helm inspect stable/wordpress
7、安装chart:
helm install chart名称
对于chart的管理命令:
create、fetch、get、inspect、package、verify...
对于release的管理命令:
install、delete、upgrade/rollback、list、history、status...
更多命令详情请查看helm --help命令。
四、注意事项
1.每次获取chart时,程序包都会被下载到.helm/cache/archive/目录下。
2.将.helm/cache/archive/目录下的chart包文件解压后,里面就是一些资源清单文件和模板文件和values文件等。
使用tree命令查看chart程序包解压后的文件结构:
[root@K8s-master archive]# tree redis redis ├── Chart.yaml ##常用来描述当前Chart的属性、名称、版本等信息,在升级chart时参考版本等信息。 ├── README.md ##自述文件,描述作者等相关信息。 ├── templates ##模板目录,包含了此chart部署时所需的相关资源清单文件。 │ ├── deployment.yaml ##templates目录下的yaml文件和我们平时自己写的不太一样,里面大量调用了Go模板语法。 │ ├── _helpers.tpl │ ├── networkpolicy.yaml │ ├── NOTES.txt │ ├── pvc.yaml │ ├── secrets.yaml │ └── svc.yaml └── values.yaml
3.可以修改values.yaml文件,用来自定义一些参数,向模板中的各属性赋值,从而实现自定义chart,生成release。