添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Helm 是优秀的基于 Kubernetes 的包管理器。利用 Helm ,可以快速安装常用的 Kubernetes 应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离。现在让我们安装并体现一下,如何通过 Helm 安装 MongoDB 吧。

Kubernetes 环境搭建可参考: Mac上使用Docker Desktop启动Kubernetes,踩坑后终于搞掂

2 Helm相关概念

包管理是一种复用理念, Helm Kubernetes 的关系,就像是 yum CentOS pip python npm JavaScript Helm 的作用有以下几点:

  • 快速安装常用应用:许多大公司都有 helm 仓库,为我们提供了许多优秀的应用,可以直接拉取安装,如快速部署 Redis 集群、安装 Jenkins 等。
  • 多环境部署:通常我们需要多套环境,如开发环境、测试环境、生产环境等, helm 可以通过 模板+变量 的形式实现快速部署;
  • 运维与开发隔离:运维人员管理 k8s 资源,写部署模板及默认配置;开发人员只需要提供少量配置即可,把精力专注在业务开发上。
  • 在使用 helm 之前,以下概念应该要搞懂:

  • helm 客户端:安装在能连上 kubernetes 集群的机器都行,用于安装、卸载应用等。
  • tiller :这是 helm 的服务端,部署在 kubernetes 集群中。客户端发请求给 Tiller Tiller 再提交给 kubernetes 。在 helm3 已经不再需要 tiller 了,所以建议使用 v3 版本的 helm
  • chart :一个 helm 的软件包,采用 TAR 格式打包,其实就是一堆用来定义 kubernetes 资源的 YAML 文件的集合。
  • Repository :仓库,存放 Chart 的地方, helm 可以同时管理多个 Repository ,非常方便。
  • Release :使用 helm 部署在 kubernetes 的应用集叫 Release ,它是以 label 的方式来标记的。
  • 3 安装并使用

    3.1 安装helm

    这里安装 helm v3 ,原因已经讲过,这样可以省去安装 tiller 。通过直接从 GitHub 下载安装的方式,地址为: https://github.com/helm/helm/releases

    下载解压后,添加环境变量到 .bash_profile 即可。

    export HELM_HOME=/Users/pkslow/Software/helm
    export PATH=$PATH:$HELM_HOME
    

    测试一下命令:

    $ helm version
    version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
    

    3.2 仓库管理

    列出已经配置的仓库(我配置了阿里和微软的库):

    $ helm repo ls
    NAME  	URL                                                   
    stable	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    azure 	http://mirror.azure.cn/kubernetes/charts
    

    新增仓库:

    $ helm repo add bitnami https://charts.bitnami.com/bitnami
    "bitnami" has been added to your repositories
    

    删除仓库:

    $ helm repo remove bitnami
    "bitnami" has been removed from your repositories
    

    更新仓库包信息到本地:

    $ helm repo update
    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "stable" chart repository
    ...Successfully got an update from the "azure" chart repository
    Update Complete. ⎈ Happy Helming!⎈ 
    

    3.3 安装MongoDB

    查看有什么MongoDB相关的包:

    $ helm search repo mongo
    NAME                             	CHART VERSION	APP VERSION	DESCRIPTION                                       
    azure/mongodb                    	7.8.10       	4.2.4      	DEPRECATED NoSQL document-oriented database tha...
    azure/mongodb-replicaset         	3.16.1       	3.6        	NoSQL document-oriented database that stores JS...
    azure/prometheus-mongodb-exporter	2.5.0        	v0.10.0    	A Prometheus exporter for MongoDB metrics         
    stable/mongodb                   	0.4.27       	3.7.1      	NoSQL document-oriented database that stores JS...
    stable/mongodb-replicaset        	2.3.1        	3.6        	NoSQL document-oriented database that stores JS...
    azure/unifi                      	0.10.0       	5.12.35    	Ubiquiti Network's Unifi Controller               
    

    指定Chart安装MongoDB

    $ helm install release101 azure/mongodb
    

    其中release101Release的名字,可按自己需求指定。查看Release状态:

    $ helm ls
    $ helm status release101
    

    查看Dashboard如下,已经安装成功:

    3.4 卸载重装

    默认它的Service类型是ClusterIP,只能供kubernetes使用,我们将它删除:

    $ helm delete release101
    release "release101" uninstalled
    

    从仓库下载Chart到本地:

    $ helm fetch azure/mongodb
    

    解压Chart的压缩文件:

    $ tar zxvf ./mongodb-7.8.10.tgz
    

    目录结构如下:

    Chart.yaml文件:用于描述Chart的基本信息,如名称、版本等;

    templates目录:部署文件模板目录;

    values.yaml文件:默认配置文件。

    我们修改一下values.yaml文件,再重新安装:

    修改Service类型为NodePort,并配置端口:

    service:
      annotations: {}
      type: NodePort
      port: 27017
      nodePort: 30018
    

    指定目录安装:

    $ helm install pkslow1 ./mongodb
    

    安装完成后,会提示如何获取MongoDB的用户名和密码,其中用户名为root,鉴权库为admin,密码通过以下命令获取(会提供命令):

    $ kubectl get secret --namespace default pkslow1-mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode
    

    获取之后,就可以通过Robo3T连接数据库了:

    4 玩点新花样

    4.1 更新变量

    复制values.yamlvalues-pkslow.yaml,修改一下端口为30028,执行以下命令:

    $ helm upgrade pkslow1 ./mongodb --values ./mongodb/values-pkslow.yaml
    

    只是更新了端口,用户名和密码没有变,改了一下端口便可以连接。

    查看定义了哪些变量:

    $ helm get values pkslow1
    

    4.2 部署一个新环境

    同样准备一份yaml文件:values-pkslow-uat.yaml,修改想要的参数后,执行以下命令:

    $ helm install pkslow-uat ./mongodb --values ./mongodb/values-pkslow-uat.yaml
    

    查看列表:

    $ helm ls
    NAME      	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART         	APP VERSION
    pkslow-uat	default  	1       	2020-07-09 16:57:32.971523 +0800 CST	deployed	mongodb-7.8.10	4.2.4      
    pkslow1   	default  	2       	2020-07-09 16:45:41.217333 +0800 CST	deployed	mongodb-7.8.10	4.2.4   
    

    这样就有两个环境了,其它一个环境还有两个版本,可以回滚。

    4.3 版本回滚

    查看历史版本:

    $ helm history pkslow1
    REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
    1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
    2       	Thu Jul  9 16:45:41 2020	deployed  	mongodb-7.8.10	4.2.4      	Upgrade complete
    

    回滚到版本1

    $ helm rollback pkslow1 1
    Rollback was a success! Happy Helming!
    

    再查看一下版本:

    $ helm history pkslow1
    REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
    1       	Thu Jul  9 01:14:09 2020	superseded	mongodb-7.8.10	4.2.4      	Install complete
    2       	Thu Jul  9 16:45:41 2020	superseded	mongodb-7.8.10	4.2.4      	Upgrade complete
    3       	Thu Jul  9 17:06:49 2020	deployed  	mongodb-7.8.10	4.2.4      	Rollback to 1 
    

    一句话,helm就是一个方便部署的工具,没有它一样可以,有它就会更方便,真香!

    附:一些常用命令

    helm--helm常用操作

    Helm常用命令手册

    Helm v3概念和常用命令详述