用Helm部署Kubernetes应用,支持多环境部署与版本回滚
1 前言
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
其中release101是Release的名字,可按自己需求指定。查看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.yaml为values-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获取更多精彩文章!
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。
欢迎大家关注、转发、在看、点赞一波四连。
用Helm部署Kubernetes应用,支持多环境部署与版本回滚的更多相关文章
- nginx之热部署,以及版本回滚
热部署的概念:当从老版本替换为新版本的nginx的时候,如果不热部署的话,会需要取消nginx服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了不影响用户的体验,且需要版本升级 ...
- openstack(pike 版)集群部署(一)----基础环境部署
一.环境 1.系统: a.CentOS Linux release 7.4.1708 (Core) b.更新yum源和安装常用软件 # yum -y install epel-release ba ...
- 学习项目部署Django+uwsgi+Nginx生产环境部署
绪论 项目生产环境部署,是很重的一个知识点.第一,Django自带的服务器很简陋,由于测试和开发环境尚可,无法用于生产环境,保障安全性和可靠性.以及性能.此外,学习部署方式,还有利于了解生产部署后的项 ...
- Rancher Server部署方式及Rancher HA环境部署
类似Rancher这种的容器管理和编排工具,它可以很快地让每个组织获得高效的弹性集群管理能力.当前技术世界的发展形势就是让开发人员从繁琐的应用配置和管理中解放出来,使用容器镜像来处理复杂的程序运行依赖 ...
- 第二章 部署Kubernetes集群准备环境
一.centos7开机自动联网设置 1.使用root用户登录进入Linux,打开进去终端 2.在终端中输入:cd /etc/sysconfig/network-scripts 3.ll命令找到目录下 ...
- qemu-kvm和openvswitch安装部署-qemu-kvm和openvswitch原型环境部署和基本测试 (1)
qemu-kvm和openvswitch安装部署 本文包含两个部分: qemu-kvm的安装部署 openvswitch的安装部署 参考文档: kvm官网:http://www.linux-kvm.o ...
- 利用Helm简化Kubernetes应用部署(1)
目录 利用Helm简化Kubernetes应用部署 Helm基础 安装Helm 使用Visual Studio 2019为Helm编写一个简单的应用 利用Helm简化Kubernetes应 ...
- Tomcat热部署:Maven项目一键部署到Tomcat服务器 - 支持多环境
参考:Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署 命令 debug模式设置关联源码 eclipse --> 项目右键 --> Debug As --& ...
- 深度学习Tensorflow生产环境部署(上·环境准备篇)
最近在研究Tensorflow Serving生产环境部署,尤其是在做服务器GPU环境部署时,遇到了不少坑.特意总结一下,当做前车之鉴. 1 系统背景 系统是ubuntu16.04 ubuntu@ub ...
随机推荐
- 实验三 Linux系统用户管理及VIM配置
项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接接地址 学号-姓名 17041428-朱槐健 作业学习目标 1.学习Linux系统用户管理 2.学习vim使用 ...
- webtatic源
我们在安装php时,系统的yum源中php版本太老,但是编译安装又太烦,这时我们可以使用webtatic源来yum安装较新版本的php. webtatic源: https://mirror.webta ...
- Android使用OkHttp实现登录注册功能
客户端 在客户端,这里将登录和注册放在了同一个界面,在账号和密码两个EditText中输入内容后,按下LOGIN按钮,进行登录:按下REGISTER按钮,进行注册. 在写代码之前,先添加OkHttp的 ...
- python基础整理(2)
布尔表达式与其余值的替换 值的测试 Python不仅仅可以使用布尔型变量作为条件,它可以直接在if中使用任何表达式作为条件: 大部分表达式的值都会被当作True,但以下表达式值会被当作False: F ...
- rust 学习之旅二,关键字和保留字
当前,以下关键字具有所描述的功能. as-执行原始类型转换,消除包含项目的特定特征的歧义,或在useand extern crate语句中重命名项目async-返回a Future而不是阻塞当前线程a ...
- cb40a_c++_STL_算法_交换swap_ranges
cb40a_c++_STL_算法_交换swap_rangesswap_ranges(b,e,b2);如果两个容器的数据数量不一致时,只交换一部分数据,a里面3个,b里面5个,则只会交换3个,b里面还有 ...
- Linux下搭建mysql
[准备环境] Linux centos7 [mysql安装步骤] 1.首先确定centos版本 cat /etc/redhat-release 2.yum安装 yum -y install mar ...
- 再看rabbitmq的交换器和队列的关系
最近又要用到rabbitmq,业务上要求服务器只发一次消息,需要多个客户端都去单独消费.但我们知道rabbitmq的机制里,每个队列里的消息只能消费一次,所以客户端要单独消费信息,就必须得每个客户端单 ...
- MQ消息队列(2)—— Java消息服务接口(JMS)
一.理解JMS 1.什么是JMS? JMS即Java消息服务(Java Message Service)应用程序接口,API是一个消息服务的标准或者说是规范,允许应用程序组件基于J ...
- ElasticSearch解决深度分页性能存在的问题使用scoll来解决
现在我们全局搜索全部的数据,每次返回3条, 从 scroll 请求返回的结果反映了 search 发生时刻的索引状态,就像一个快照.后续的对文档的改动(索引.更新或者删除)都只会影响后面的搜索请求. ...