• Kubernetes包管理工具-Helm3使用


    1、Helm仓库

    Helm 的 Repo 仓库和 Docker Registry 比较类似,Chart 库可以用来存储和共享打包 Chart 的位置,我们在安装了 Helm 后,默认的仓库地址是 google 的一个地址,这对于我们不能科学上网的同学就比较苦恼了,没办法访问到官方提供的 Chart 仓库,我们可以用helm repo list来查看当前的仓库配置:

    我们可以看到除了一个默认的 stable 的仓库配置外,还有一个 local 的本地仓库,这是我们本地测试的一个仓库地址。其实要创建一个 Chart 仓库也是非常简单的,Chart 仓库其实就是一个带有index.yaml索引文件和任意个打包的 Chart 的 HTTP 服务器而已,比如我们想要分享一个 Chart 包的时候,我们将本地的 Chart 包上传到该服务器上面,别人就可以使用了,所以其实我们自己托管一个 Chart 仓库也是非常简单的,比如阿里云的 OSS、Github Pages,甚至自己创建的一个简单服务器都可以。

    Helm官方Charts仓库 https://kubernetes-charts.storage.googleapis.com/ 需要翻墙访问,阿里云提供了一个镜像仓库 https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 然而从11月开始好像就没有更新过。然而Helm的项目迭代得非常快,阿里镜像里连 rabbitmq-ha 都还没有。Charts仓库组织方式其实很简单,只有一个索引文件和对应压缩包,可以直接从官方源爬过来放到自己服务器下。当然你也可以使用了官方推荐的使用GitPages搭建Charts仓库的方式。

    这里我们推荐使用微软的Helm仓库:

    • stable: http://mirror.azure.cn/kubernetes/charts/
    • incubator: http://mirror.azure.cn/kubernetes/charts-incubator/

    我们可以通过下面的命令来添加Helm仓库:

    1. helm repo add stable http://mirror.azure.cn/kubernetes/charts/
    2. helm repo update

    仓库添加完成后,可以使用 update 命令进行仓库更新。当然如果要我们自己来创建一个 web 服务器来服务 Helm Chart 的话,只需要实现下面几个功能点就可以提供服务了:

    • 将索引和Chart置于服务器目录中;
    • 确保索引文件index.yaml可以在没有认证要求的情况下访问;
    • 确保 yaml 文件的正确内容类型(text/yaml 或 text/x-yaml)。

    如果你的 web 服务提供了上面几个功能,那么也就可以当做 Helm Chart 仓库来使用了。

    2、查找Chart

    Helm 将 Charts 包安装到 Kubernetes 集群中,一个安装实例就是一个新的 Release,要找到新的 Chart,我们可以通过搜索命令完成。

    注:如果不能科学上网,将默认的 stable 的仓库地址更换成上面微软地址。

    下面我们直接运行 helm search repo 命令可以查看有哪些 Charts 是可用的(Helm2和Helm3的操作命令还是有很大的区别的、请各位同学自行上Helm官方文档去查看具体使用方法:点击查看):

    如果没有使用过滤条件,helm search repo 显示所有可用的 charts。可以通过使用过滤条件进行搜索来缩小搜索的结果范围:

    可以看到明显少了很多 charts 了,同样的,我们可以使用 inspect 命令来查看一个 chart 的详细信息:

    helm inspect chart stable/mysql
    

    使用 inspect 命令可以查看到该 chart 里面所有描述信息,包括运行方式、配置信息等等。 通过 helm search 命令可以找到我们想要的 chart 包,找到后就可以通过 helm install 命令来进行安装了。

    3、安装Chart

    要安装新的软件包,直接使用 helm install 命令即可。最简单的情况下,它只需要一个 chart 的名称参数:

    现在 mysql chart 已经安装上了,安装 chart 会创建一个新 release 对象。上面的 release 被命名为 mysql-1584974902。如果你想使用你自己的 release 名称,只需使用–name参数指定即可,比如:

    helm install --set name=mysqldb stable/mysql --generate-name
    

    在安装过程中,helm 客户端将打印有关创建哪些资源的有用信息,release 的状态以及其他有用的配置信息,比如这里的有访问 mysql 服务的方法、获取 root 用户的密码以及连接 mysql 的方法等信息。

    注:值得注意的是 Helm 并不会一直等到所有资源都运行才退出。因为很多 charts 需要的镜像资源非常大,所以可能需要很长时间才能安装到集群中去。

    要跟踪 release 状态或重新读取配置信息,可以使用 helm status 查看:

     helm status mysql-1584976849
    

    可以看到当前 release 的状态是DEPLOYED(参考上图),下面还有一些安装的时候出现的信息。

    4、自定义Chart

    上面的安装方式是使用 chart 的默认配置选项。但是在很多时候,我们都需要自定义 chart 以满足自身的需求,要自定义 chart,我们就需要知道我们使用的 chart 支持的可配置选项才行。 要查看 chart 上可配置的选项,使用helm inspect values命令即可,比如我们这里查看上面的 mysql 的配置选项:

    helm inspect values stable/mysql | more
    

    然后,我们可以直接在 YAML 格式的文件中来覆盖上面的任何配置,在安装的时候直接使用该配置文件即可:(config.yaml)

    helm install -f config.yaml --set name=z0ukun stable/mysql --generate-name
    

    我们这里通过 config.yaml 文件定义了 mysqlUser 和 mysqlDatabase,并且把 service 的类型更改为了 NodePort,然后现在我们来安装的时候直接指定该 yaml 文件。我们可以看到当前 release 的名字已经变成 mysql-1584976849 了。然后可以查看下 mysql-1584976849 关联的 Service 是否变成 NodePort 类型的了。

    我们可以看到看到服务 mysql-1584976849 变成了 NodePort 类型的,二之前默认创建的 mewing-squid-mysql 是 ClusterIP 类型的,证明上面我们通过 YAML 文件来覆盖 values 是成功的。接下来我们查看下 Pod 的状况:

    比较奇怪的是之前默认创建的和现在 mysql-1584976849 的 release 创建的 Pod 都是 Pending 状态,直接使用 describe 命令查看下:

    我们可以发现两个 Pod 处于 Pending 状态的原因都是 PVC 没有被绑定上,所以这里我们可以通过 storageclass 或者手动创建一个合适的 PV 对象来解决这个问题。 另外为了说明 helm 更新的用法,我们这里来直接禁用掉数据持久化,可以在上面的 config.yaml 文件中设置:

    1. persistence:
    2. enabled: false

    另外一种方法就是在安装过程中使用–set来覆盖对应的 value 值,比如禁用数据持久化,我们这里可以这样来覆盖:

    helm install stable/mysql --set name=z0ukun-persistence.enabled=false --generate-name
    

    5、升级Helm

    我们这里将数据持久化禁用掉来对上面的 mysql-1584976849 进行升级:

    编辑

    可以看到已经变成 DEPLOYED 状态了,现在我们再去看看 Pod 的状态呢:

    我们可以看到 mysql-1584976849 关联的 Pod 已经变成了 running 的状态,已经不是 Pending 状态了,同样的,使用 describe 命令查看:

    我们可以看到现在没有任何关于 PVC 的错误信息了,这是因为我们刚刚更新的版本中就是禁用掉了的数据持久化的,证明 helm upgrade 和 –values 是生效了的。现在我们使用 helm ls 命令查看先当前的 release:

    可以看到 mysql-1584976849 这个 release 的REVISION已经变成2了,这是因为 release 的版本是递增的,每次安装、升级或者回滚,版本号都会加1,第一个版本号始终为1,同样我们可以使用 helm history 命令查看 release 的历史版本。当然如果我们要回滚到某一个版本的话,使用 helm rollback 命令即可,比如我们将 mysql-1584976849 回滚到上一个版本:

    helm rollback mysql-1584976849 1
    

    当然、这里我们只是讲到了 Helm3 的一些常用方法,更多用法我们将在后面的内容和大家接触到。 

  • 相关阅读:
    深度学习之 8 深度模型优化与正则化
    浅谈电弧光保护在10kV变电站高压室的应用方案
    Centos7 Shell编程之正则表达式、文本处理工具
    从阿里云“数字证书管理服务”申请免费的SSL证书
    VueX简单又详细的解读,看了就会用
    软件测试的几种方法
    springCloudeAlibaba的使用
    Unity_相机灵活跟随角色移动
    vue乾坤微前端项目
    《Linux高性能服务器编程》--TCP/IP协议族
  • 原文地址:https://blog.csdn.net/zfw_666666/article/details/125218332