极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 部署利器: helm

山月最近想起来自己还有一个 k8s 集群,决定输出一些云原生的文章,在我的 github 仓库 https://github.com/shfshanyue/learn-k8s (opens new window) 可以看到。本篇文章主要介绍 helm,说到它,实在是太简单太好用,在 k8s 上部署应用就和傻瓜似的...傻瓜式一键安装,你值得拥有

helm 是基于 kubernetes 的包管理器。它之于 kubernetes 就如 yum 之于 centospip 之于 pythonnpm 之于 javascript

helm 的引入对于管理集群有哪些帮助呢?可体现在基础运维建设及业务应用两方面

  1. 基础设施,更方便地部署与升级基础设施,如 gitlabprometheusgrafanaES
  2. 业务应用,更方便地部署,管理与升级公司内部应用,为公司内部的项目配置 Chart,使用 helm 结合 CI,在 k8s 中部署应用如一行命令般简单

当然 helm 更伟大的在于它的思想上:Separation of concerns。使得运维人员与开发人员进一步职责分离

让开发人员写 k8s 资源配置文件是不现实的

  1. 不是所有开发都了解k8s,或者说很少,不了解 k8s 很难写资源配置部署文件
  2. 开发的主要职能还是在业务上

于是 helm 应时而出,运维通过 helm 配置好资源文件模板,然后交给开发填参数。

本篇文章主要介绍如何安装 helm 以及如何使用 helm 部署基础服务和业务

# 安装 helm

这里参考官方文档 安装 helm (opens new window)

helm 此时已发布了 v3,本篇文章关于 helm 安装及使用指南以 helm v3 为基础。

helm 在 helm v2 时分为客户端 (helm client,即命令行工具) 与服务端 (helm server) 两部分,在服务端又叫 Tiller,安装 Tiller 时会在集群中部署一个 Pod,用以接替资源部署。

# 安装客户端 (helm client)

helm client 需要安装在你可以访问 k8s 集群的任何服务器,如同 kubectl,你既可以安装在你自己的 PC/Mac 中,也可以安装在 kubectl 集群环境的主节点

在 mac 上进行安装

$ brew install kubernetes-helm

在 linux 上进行安装

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

根据二进制包进行安装,比较推荐,毕竟使用以上两种方案在目标机可能有网络问题

  1. 需要在代理节点下载二进制脚本
  2. 使用 rsync 或者 scp 将脚本移动到目标机目标位置

示例选择 3.2.3 进行安装,helm 的最新版本可以参考 helm/helm Releases (opens new window)

可以选择 3.0+ 版本的安装,目前最新版本是 Helm v3.0.0-rc.1 (2019/11/01)

# 下载 MAC 上适用的软件包
# -L: 追踪重定向链接
# -O: 保存到本地
# -S: 打印错误
$ curl -SLO https://get.helm.sh/helm-v3.2.3-darwin-amd64.tar.gz 

# 下载 CentOS 上适用的软件包
$ curl -SLO https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz

# 如果有网络问题,请在代理节点下载并 rsync 到目标节点,如果没有,跳过此步
$ rsync -avhzP proxy:/root/helm-v3.2.3-linux-amd64.tar.gz .

# 如果在 mac 上
$ tar -zxvf helm-v3.2.3-darwin-amd64.tar.gz 

# 如果在 centos 上
$ tar -zxvf helm-v3.2.3-linux-amd64.tar.gz

# 进入相应目录,移至 /bin 目录
$ mv linux-amd64/helm /usr/local/bin/helm

此时 helm v3 安装成功,使用 helm version 查看版本号

$ helm version
version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}

# 介绍

helm 中有三个关键概念:ChartRepoRelease

  • Chart: 一系列 k8s 资源集合的命名,它包含一系列 k8s 资源配置文件的模板与参数,可供灵活配置
  • Repo: 即 chart 的仓库,其中有很多个 chart 可供选择,如官方 helm/charts (opens new window)
  • Release: 当一个 Chart 部署后生成一个 release

# Chart 简介

使用 helm create 创建一个 chart,了解简单 chart 的目录结构

关于如何安装 helm 参考下一小节

# 创建一个 chart
$ helm create todo
Creating todo

$ cd todo

# 打印 chart 目录,主要文件有 Chart.yaml 与 values.yaml
# --dirsfirst 先打印文件夹名称
$ tree --dirsfirst
.
├── charts
├── templates
│   ├── tests
│   │   └── test-connection.yaml
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
├── Chart.yaml
└── values.yaml

3 directories, 8 files

查看主要的两个文件目录

  • templates/: 这是运维大哥写的配置文件模板,示例是最简单应用的资源配置,但复杂应用还会有 pvc,role,service-acount 等等
  • values.yaml: 这是给开发小弟写的可选参数,但是大部分参数都被运维大哥给内置了

# 使用 helm 部署基础服务

真实案例可以参看我的系列文章其它章节

这里讲述一些关于部署基础服务的一般步骤,假设我们需要部署 redis

这里使用 helm v3,语法与 v2 可能略有出入

# 00 添加相关 Repo

通过 helm repo add 可以添加 Repo,这里列出几个频率使用较高的 Repo

如果在国内有网络问题,可以使用阿里云镜像

$ helm repo add stable https://apphub.aliyuncs.com/stable

$ helm repo add bitnami https://charts.bitnami.com/bitnami

另外,对于一些大软件公司也会维护自己的 Chart,如 gitlabelasti

# 01 查找相关 Chart

使用 helm search hub

$ helm search repo redis
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
apphub/prometheus-redis-exporter        3.1.0           1.0.4           Prometheus exporter for Redis metrics
apphub/redis                            9.3.1           5.0.5           Open source, advanced key-value store. It is of...
apphub/redis-cache                      0.4.1           4.0.12-alpine   A pure in-memory redis cache, using statefulset...
apphub/redis-ha                         3.8.0           5.0.5           Highly available Kubernetes implementation of R...
apphub/redis-operator                   1.0.0                           Redis Operator provides high availability redis...
apphub/redispapa                        0.0.1           0.0.1           利用redis的info信息对redis的使用情况进行监控的一...
bitnami/redis                           10.7.1          6.0.5           Open source, advanced key-value store. It is of...
bitnami/redis-cluster                   2.3.1           6.0.5           Open source, advanced key-value store. It is of...
stable/prometheus-redis-exporter        3.4.1           1.3.4           Prometheus exporter for Redis metrics
stable/redis                            10.5.7          5.0.7           DEPRECATED Open source, advanced key-value stor...
stable/redis-ha                         4.4.4           5.0.6           Highly available Kubernetes implementation of R...
apphub/codis                            3.2             3.2             A Helm chart for Codis

# 02 选定 Chart,跟进 Chart 的官方文档

我们选定 stable/redis (opens new window) 这个 chart。

跟踪官方文档,设置相关参数,存储为 values-production.yaml

# Production configuration
$ helm install redis bitami/redis --values values-production.yaml

如何部署完成,可以查看安装某个 Release 时的 values

$ helm get values redis

如果需要升级,使用 helm upgrade

$ helm upgrade redis bitnami/redis --values values-production.yaml

# 03 校验部署状态

这与需要部署的资源有关,不过一般也就分为 ServicePodPVC

helm status redis
NAME: redis
LAST DEPLOYED: Fri Nov  8 21:07:24 2019
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **
Redis can be accessed via port 6379 on the following DNS name from within your cluster:

redis-master.default.svc.cluster.local

# 总结

本篇文章介绍了如何安装 helm v3,及如何使用 helm 快速部署应用,简单总结为两条命令

# 在有 k8s 管理权限的 mac 上安装 helm
$ brew install helm

# 使用 helm 安装 redis
$ helm install redis bitnami/redis

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 7/21/2019, 11:25:08 AM