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