1 前言

Helm是优良的基于Kubernetes的包管理器。利用Helm,能够疾速装置罕用的Kubernetes利用,能够针对同一个利用疾速部署多套环境,还能够实现运维人员与开发人员的职责拆散。当初让咱们装置并体现一下,如何通过Helm装置MongoDB吧。

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

2 Helm相干概念

包治理是一种复用理念,HelmKubernetes的关系,就像是yumCentOSpippythonnpmJavaScriptHelm的作用有以下几点:

  • 疾速装置罕用利用:许多大公司都有helm仓库,为咱们提供了许多优良的利用,能够间接拉取装置,如疾速部署Redis集群、装置Jenkins等。
  • 多环境部署:通常咱们须要多套环境,如开发环境、测试环境、生产环境等,helm能够通过模板+变量的模式实现疾速部署;
  • 运维与开发隔离:运维人员治理k8s资源,写部署模板及默认配置;开发人员只须要提供大量配置即可,把精力专一在业务开发上。

在应用helm之前,以下概念应该要搞懂:

  • helm客户端:装置在能连上kubernetes集群的机器都行,用于装置、卸载利用等。
  • tiller:这是helm的服务端,部署在kubernetes集群中。客户端发申请给TillerTiller再提交给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/...

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

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

测试一下命令:

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

3.2 仓库治理

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

$ helm repo lsNAME      URL                                                   stable    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartsazure     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 updateHang 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 repositoryUpdate Complete. ⎈ Happy Helming!⎈ 

3.3 装置MongoDB

查看有什么MongoDB相干的包:

$ helm search repo mongoNAME                                 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 release101release "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 lsNAME          NAMESPACE    REVISION    UPDATED                                 STATUS      CHART             APP VERSIONpkslow-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 pkslow1REVISION    UPDATED                     STATUS        CHART             APP VERSION    DESCRIPTION     1           Thu Jul  9 01:14:09 2020    superseded    mongodb-7.8.10    4.2.4          Install complete2           Thu Jul  9 16:45:41 2020    deployed      mongodb-7.8.10    4.2.4          Upgrade complete

回滚到版本1

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

再查看一下版本:

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

5 总结

一句话,helm就是一个不便部署的工具,没有它一样能够,有它就会更不便,真香!


欢送拜访南瓜慢说 www.pkslow.com获取更多精彩文章!

欢送关注微信公众号<南瓜慢说>,将继续为你更新...

多读书,多分享;多写作,多整顿。

欢送大家关注、转发、在看、点赞一波四连。