用Helm部署Kubernetes应用支持多环境部署与版本回滚

9次阅读

共计 4202 个字符,预计需要花费 11 分钟才能阅读完成。

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/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 

5 总结

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


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

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

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

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

正文完
 0