11-4 部署前奏-Helm&Operator
部署方案选择
- 手动部署
- Helm 类似centos yum,k8s的管理包工具
- Prometheus operator 开源的,更深去的prometheus部署管理工作。 crd+控制器管理机制。
- helm + Prometheus operator 非常优雅
Helm
Helm简介
helm的作用:像centos7中的yum命令一样,管理软件包,只不过helm这儿管理的是在k8s上安装的各种容器。
tiller的作用:像centos7的软件仓库一样,简单说类似于/etc/yum.repos.d目录下的xxx.repo。
一包一Chart(一个目录)
Helm用途
做为 Kubernetes 的⼀个包管理工具, Helm 具有如下功能:
- 创建新的 chart
- chart 打包成 tgz 格式
- 上传 chart 到 chart 仓库或从仓库中下载 chart
- 在 Kubernetes 集群中安装或卸载 chart
- 管理用 Helm 安装的 chart 的发布周期
Helm Client 是⽤户命令行工具,其主要负责如下:
- 本地 chart 开发;
- 仓库管理;
- 与 Tiller sever 交互;
- 发送预安装的 chart;
- 查询 release 信息;
- 要求升级或卸载已存在的 release。
Tiller Server 是⼀个部署在 Kubernetes 集群内部的 server,其与 Helm client、Kubernetes API server 进⾏交互。Tiller server 主要负责如下:
- 监听来⾃ Helm client 的请求;
- 通过 chart 及其配置构建⼀次发布;
- 安装 chart 到 Kubernetes 集群,并跟踪随后的发布;
- 通过与 Kubernetes 交互升级或卸载 chart;
- 简单的说,client 管理 charts,而 server 管理发布 release。
Helm Architecture 组件架构
helm3 的安装
Helm是一个二进制文件,我们直接到github的release去下载就可以,地址如下: https://github.com/helm/helm/releases
# 解压 $ tar -zxvf helm-v3.5.4-linux-amd64.tar.gz $ mv linux-amd64/helm /usr/local/bin/ # 验证 $ helm version
kubectl 工具能够正常访问kubernetes 集群的 apiserver。 然后我们需要先执行 helm init 来进行初始化。Helm3的初始化就简单了很多,不再需要给集群中部署 Tiller 了。
还用helm3前提安装好 kubectl 集群配置。
helm3使用 创建nginx实例测试
helm create hello-helm #创建项目
我们通过查看 templates 目录下⾯的 deployment.yaml 文件可以看出默认创建的 Chart 是⼀个 nginx 服务,具体的每个文件是干什么用的,我们可以前往 Helm 官方文档进行查看,当然后面我们也会详细讲解的。比如这里我们来安装 1.7.9 这个版本的 nginx。我们直接更改 value.yaml 文件下面的 image tag 即可,将默认的 stable 更改为 1.7.9,为了测试方便可以直接访问,我们把 Service 的类型也改成 NodePort:
image: repository: nginx pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "1.7.9" service: type: NodePort # ClusterIP port: 80
现在我们来尝试安装一下这个 Chart 。在 Helm 2 中,如果没有指定 release 的名称,则会自动随机生成一个名称。但是在 Helm 3 中,则必须主动指定名称,或者增加 –generate-name 的参数。比如:
helm install ./hello-helm --generate-name # 安装 # 查看详细信息 kubectl get svc# 查看服务 暴露的端口
浏览器中 打开 http://192.168.1.131:31427。 根据创建的 Service 的 NodePort 来访问该服务了, 就可以正常的访问我们刚刚部署的 nginx 应用了
通过命令操作
#查看Release helm list # 注:我们可以将打包的 tgz ⽂件分发到任意的服务器上,通过 helm fetch 就可以获取到该 Chart了。 helm package hello-helm # 打包Chart # 删除Release helm delete hello-helm-1584972412
更多关于 Helm 的使用命令,我们可以前往官方文档
Helm2和Helm3的区别
移除Tiller(前面已经讲解过了、这里不再重复);
Release 名称可在不同 ns 间重用;
必须指定Release名称;
支持将 Chart 推送至 Docker 镜像仓库中;
移除 helm serve。
Operator实现原理
自定义资源类型(CRD) + 自定义控制器
k8s1.7 以后支持自定义资源类型。
apiVersion: "etcd.database.coreos.com/v1beta2" kind: "EtcdCluster" metadata: name: "example-etcd-cluster" spec: size: 3 version: "2.3.15"
CRD 网上资源学习。
end...
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/14701433.html