作者:双语的家_352 | 来源:互联网 | 2023-10-15 13:24
k8shelm官网:https:helm.sh点击charts:https:artifacthub.iopackagessearch?sortrelevance&page11.1h
k8s helm
官网: https://helm.sh/
点击charts : https://artifacthub.io/packages/search?sort=relevance&page=1
1.1 helm介绍
如果我们想在k8s集群中创建一个mysql集群,我们需要设计svc,镜像等,很是繁琐
即使我们有别人给我们写好的yaml,当我们想改里面的内容时,需要先熟悉里面的配置才能修改,这样的话还不如自己写,helm则把所有参数提取出来了
helm 现在处于一个尴尬的位置,至少当前时间来说,v3版本已经出了,但是目前市面上都普遍使用v2版本。如同python一样,之前都是v2版本,包括现在的centos7里也是python2.6,但是现在各个公司写的东西大部分都是python3写出来的了。我们现在讲的是v2,因为helm的v3里面的一些模板还不可用
Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署
Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和 release
- chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包,可以理解为docker中的镜像
- release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release,可以理解为docker中的容器
Helm 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示,是v2版本的架构
Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互
2.1 Helm 部署
helm对时间要求很严格,所以在部署前一定确认机器时间是对的
越来越多的公司和团队开始使用 Helm 这个 Kubernetes 的包管理器,我们也将使用 Helm 安装 Kubernetes 的常用组件。 Helm 由客户端命 helm 令行工具和服务端 tiller 组成,Helm 的安装十分简单。 下载 helm 命令行工具到 master 节点 node1 的 /usr/local/bin 下,这里下载的 2.13. 1版本:
我这里把包下载到百度网盘了:
链接:https://pan.baidu.com/s/1_C44tFLgHKHA8ZbSpkaoXw
提取码:u07g
2.1.1 helm客户端安装
helm客户端可以在任何主机上,但是必须要有配置文件
$ ntpdate ntp1.aliyun.com
$ wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
$ tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
$ cd linux-amd64/
$ cp helm /usr/bin/;chmod 755 /usr/bin/helm
此时的helm还无法和tiller交互,我们需要
2.1.2 tiller服务端安装
安装tiller,需要在每个节点上导入tiller镜像
docker load -i helm-tiller.tar
为了安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以在这台机器上访问 apiserver 且正常使用。 这里的 node1 节点以及配置好了 kubectl
因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分配合适的角色给它。 详细内容可以查看helm文档中的 Role-based Access Control。 这里简单起见直接分配 cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac-config.yaml 文件:
mkdir -p /opt/kubernets/helm/install
cd /opt/kubernets/helm/install
vim 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
//创建SA并绑定到cluster-admin集群角色权限,命名空间是kube-system,可以和apiserver交互
kubectl apply -f rbac.yaml
//让heml绑定新建的SA tiller。--skip-refresh不要跟远程仓库更新metadata,因为是在国外,无法连接
helm init --service-account tiller --skip-refresh
//helm repo list可以看到是海外的库,我们无法访问
[root@master1 install]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts