云原生应用10:Helm让k8s部署有状态应用变得简单
1.Helm简介大家都用过centos的yum,它是Linux系统下的包管理工具,通过yum 可以很方便的安装各种工具,而 Helm 是 Kubernetes中方便有状态应用部署的工具,通过 helm 可以很方便部署一个 redis 集群、rabbitmq集群等等,这些集群的镜像已经被 helm 官方做好了,用户只需通过 helm install 安装部署即可2.Helm 组件1.Helm...
k8s部署无状态应用非常方便,写好deployment、replicaset配置清单即可部署,而有状态应用集群则很困难,因为k8s会探测、重启、调度,Pod会销毁重建,像 redis、mysql这些有主从关系的,主节点pod重启后,还是得成为主节点,写这类应用的配置清单很麻烦,而 helm 为简化有状态应用的创建应运而生
1.Helm简介
大家都用过centos的yum,它是Linux系统下的包管理工具,通过yum 可以很方便的安装各种工具,而 Helm 是 Kubernetes中方便有状态应用部署的工具,通过 helm 可以很方便部署一个 redis 集群、rabbitmq集群等等,这些集群的镜像已经被 helm 官方做好了,用户只需通过 helm install 安装部署即可
2.Helm 组件
- 1.Helm 是一个命令行客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库
- 2.Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能
3.Helm核心术语
- Chart:Helm的软件包,采用 tar 格式。
- Repository:Helm 的软件仓库,Charts仓库
- Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release
4.官网地址
Helm官方地址:https://helm.sh/
Helm Github:http://github.com/helm/helm
Chart中央仓库地址:https://hub.kubeapps.com/ (国内被墙,一般用下面微软仓库地址)
微软Chart仓库地址:http://mirror.azure.cn/kubernetes/charts/
5.Helm安装
- 1.在github上,下载helm客户端,https://github.com/helm/helm/releases
- 2.解压,tar -xvzf helm-v2.14.3-linux-amd64.tar.gz
- 3.进入解压目录,找到 helm binary文件,复制到 /usr/bin/ 或 /usr/local/bin/目录下
- 4.测试,helm help
- 5.sudo snap install helm --classic ,(先安装snap: https://snapcraft.io/docs/installing-snap-on-centos)
- 6.下载 rbac-config.yaml,并部署,kubectl apply -f rbac-config.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
-
7.下载 tiller 镜像,tiller官方镜像因国内网络被限,需要在docker hub下载网友的 tiller 镜像,docker pull jessestuart/tiller:latest
-
8.初始化,helm init --service-account tiller --history-max 200
-
9.查看 tiller 的 pod 状态,kubectl get pods -n kube-system,如果状态不为 running,则需要修改 tiller 的 deployment配置文件,修改里面的镜像为本地下载的镜像,kubectl edit deployment tiller-deploy -n kube-system,修改为:jessestuart/tiller:latest,不修改则tiller容器无法启动,状态为ImagePullBackoff
-
10.查看版本,helm version
-
11.修改仓库地址为微软Chart仓库地址:helm repo add stable http://mirror.azure.cn/kubernetes/charts/
-
12.更新仓库,helm repo update
-
13.查询仓库,helm search redis,也可以在helm的chart官网通过网页查询仓库,https://hub.helm.sh/
-
14.查看已安装的charts,helm list
-
15.安装redis,helm install --name redis1 stable/redis,helm会把charts下载到本地的 ${HOME}/.helm/cache/archive/redis.tar.gz,执行安装命令时会解压该文件,根据里面定义的配置内容,把文件一个个拷贝出来,最后提交给 k8s 的master记录到etcd中,用户可以修改配置文件中的内容,来配置自己需要的应用,可以参考helm–charts—redis的安装配置页:https://hub.helm.sh/charts/bitnami/redis
-
16.删除安装的charts,helm delete redis1 --purge
安装redis可能无法安装成功,因为redis的配置文件中,还定义了需要 pv 存储资源,因此你还需要创建 k8s 的 pv 资源,pv可以挂载分布式文件存储系统,如:nfs、glusterfs等
以nfs为例:
在服务器上装nfs,yum -y install nfs-utils
创建2个目录:mkdir -p /data/volumes/v1,mkdir -p /data/volumes/v2
创建配置,vi /etc/exports,内容如下:
/data/volumes/v1 192.168.0.0/16(rw,no_root_squash)
/data/volumes/v2 192.168.0.0/16(rw,no_root_squash)
重载,exportfs -arv
挂载,k8s所有worker节点挂在该目录, mount -t nfs node1:/data/volumes /mnt
卸载, umount /mnt
挂载后就可以在 k8s 中创建 pv 资源了,pv-demo.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
labels:
name: pv1
spec:
nfs:
path: /data/volumes/v1
server: store1.magedu.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv2
labels:
name: pv2
spec:
nfs:
path: /data/volumes/v2
server: store1.magedu.com
accessModes: ["ReadWriteMany","ReadWriteOnce"]
capacity:
storage: 10Gi
创建pv,kubectl apply -f pv-demo.yaml
查看pv,kubectl get pv
查看pvc,kubectl get pvc
有 pv 资源后,上面的 redis 就会通过 pvc 申请 pv,如果有符合未绑定且符合空间大小的 pv,就会绑定起来给redis存储数据
更多推荐
所有评论(0)