Kubernetes入门 十七、Helm 包管理器

目录

  • 概述
  • Helm 的三大概念
  • Helm 的安装
  • 仓库管理
  • Helm 的常用命令
  • chart详解
    • 目录结构
    • Redis chart 实践
    • 升级回滚

概述

Kubernetes 上的应用对象,都是由特定的资源描述组成,包括 Deployment、Service 等,都保存在各自的文件中或者集中写在一个配置文件,然后通过 kubectl apply -f 部署。

如果应用只由一个或几个这样的服务组成,上面的部署方式就足够了。

但是对于一个复杂的应用,会有很多类似上面的资源描述文件,如:微服务架构应用,组成应用的服务可能多达几十、上百个,如果有更新或回滚应用的需求,可能要修改和维护所涉及到大量的资源文件,而这种组织和管理应用的方式就显得力不从心了。并且由于缺少对发布过的应用进行版本管理和控制,使得 Kubernetes 上的应用维护和更新面临诸多的挑战,主要面临以下的问题:

    • ① 如何将这些服务作为一个整体管理?
    • ② 这些资源文件如何高效复用?
    • ③ 应用级别的版本如何管理?

Helm 是 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如:yum、apt 等,可以很方便的将之前打包好的 yaml 文件部署到 Kubernetes 上。

Helm 可以做以下的事情:

  • 从头开始创建新的 chart
  • 将 chart 打包成归档(tgz)文件
  • 与存储 chart 的仓库进行交互
  • 在现有的 Kubernetes 集群中安装和卸载 chart
  • 管理与 Helm 一起安装的 chart 的发布周期

Helm 的三大概念

  • Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
  • Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
  • Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release 。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name 。

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

可以类比 Docker 来理解,Chart 就类似于 Docker 中的镜像(Docker 中的镜像就是一系列文件的集合,Chart 也是一系列文件的集合),Repository(仓库)就类似于 Docker Hub,Release 就类似于 Docker 中的容器(可以根据镜像 run 多个容器)。

Helm 的安装

使用 Helm ,需要一个 Kubernetes 集群。对于 Helm 的最新版本,我们建议使用 Kubernetes 的最新稳定版, 在大多数情况下,它是倒数第二个次版本。

查看 Helm 和对应支持的 Kubernetes 版本:

Kubernetes入门 十七、Helm 包管理器_第1张图片

下载额二进制文件:

wget https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gz

解压文件:

tar -zxvf helm-v3.10.2-linux-amd64.tar.gz

将解压目录下的 helm 程序移动到 usr/local/bin/helm:

mv linux-amd64/helm /usr/local/bin/helm

helm 命令补全:

helm completion bash | sudo tee /etc/bash_completion.d/helm > /dev/null
source /usr/share/bash-completion/bash_completion

添加阿里云 helm 仓库:

helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

仓库管理

常用仓库:

  • 微软仓库:http://mirror.azure.cn/kubernetes/charts,推荐。

  • 阿里云仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts。

添加 chart 仓库:

helm repo add 仓库名 仓库URL地址
# 如下
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

查看 chart 仓库列表:

helm repo list
# 如下
NAME         	URL
stable       	http://mirror.azure.cn/kubernetes/charts
aliyun       	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
ingress-nginx	https://kubernetes.github.io/ingress-nginx

从 chart 仓库中更新本地可用 chart 的信息:

helm repo update
# 更新从各自chart仓库中获取的有关 chart 的最新信息。信息会缓存在本地,被诸如 'helm search' 等命令使用。

删除 Chart 仓库:

helm repo remove 仓库名
# 如下
helm repo remove aliyun

Helm 的常用命令

命令 描述
create 创建一个chart并指定名字
dependency 管理chart依赖
get 下载一个release。可用的子命令:all、hooks、manifest、notes、values。
history 获取release历史。
install 安装一个chart。
list 列出release。
package 将chart目录打包到chart存档文件中。
pull 从远程仓库中下载chart并解压到本地。比如:helm install stable/mysql --untar。
repo 添加、列出、移除、更新和索引chart仓库。可用的子命令:add、index、list、remove、update。
rollback 从之前的版本回退。
search 根据关键字搜索chart。可用的子命令:all、chart、readme、values。
show 查看chart的详细信息。可用的子命令:all、chart、readme、values。
status 显示已命名版本的状态。
template 本地呈现模板。
uninstall 卸载一个release。
upgrade 更新一个release。
version 查看Helm客户端版本。

chart详解

目录结构

mychart
├── Chart.yaml
├── charts # 该目录保存其他依赖的 chart(子 chart)
├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
│   ├── NOTES.txt # 用户运行 helm install 时候的提示信息
│   ├── _helpers.tpl # 用于创建模板时的帮助类
│   ├── deployment.yaml # Kubernetes deployment 配置
│   ├── ingress.yaml # Kubernetes ingress 配置
│   ├── service.yaml # Kubernetes service 配置
│   ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│   └── tests
│       └── test-connection.yaml
└── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖

Redis chart 实践

  1. 添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
  1. 搜索 redis chart
helm search repo redis
# 结果如下
NAME                            	CHART VERSION	APP VERSION	DESCRIPTION
aliyun/redis                    	1.1.15       	4.0.8      	Open source, advanced key-value store. It is of...
aliyun/redis-ha                 	2.0.1        	           	Highly available Redis cluster with multiple se...
bitnami/redis                   	18.0.1       	7.2.0      	Redis(R) is an open source, advanced key-value ...
bitnami/redis-cluster           	9.0.1        	7.2.0      	Redis(R) is an open source, scalable, distribut...
stable/prometheus-redis-exporter	3.5.1        	1.3.4      	DEPRECATED 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.6        	5.0.6      	DEPRECATED - Highly available Kubernetes implem...
aliyun/sensu                    	0.2.0        	           	Sensu monitoring framework backed by the Redis ...
stable/sensu                    	0.2.5        	0.28       	DEPRECATED Sensu monitoring framework backed by...

DEPRECATED版本的一般是废弃的,不使用。

查看安装说明

helm show readme bitnami/redis
  1. 拉取chart并解压
helm pull bitnami/redis
tar -xvf redis-17.4.3.tgz
  1. 修改配置

修改 storageClass 为 managed-nfs-storage
设置 redis 密码 password
修改集群架构 architecture,默认是主从(replication,3个节点),可以修改为 standalone 单机模式
修改实例存储大小 persistence.size 为需要的大小
修改 service.nodePorts.redis 向外暴露端口,范围 <30000-32767>

  1. 创建命名空间

给他一个单独命名空间(方便管理,实际生产看情况):

kubectl create namespace redis
  1. 安装
cd ../
helm install redis ./redis -n redis
  1. 查看安装情况
# 查看 helm 安装列表
helm list

# 查看 redis 命名空间下所有对象信息
kubectl get all -n redis
  1. 卸载
helm delete redis -n redis

升级回滚

要想升级 chart 可以修改本地的 chart 配置并执行:

helm upgrade [RELEASE] [CHART] [flags]
helm upgrade redis ./redis

使用 helm ls 的命令查看当前运行的 chart 的 release 版本,并使用下面的命令回滚到历史版本:

helm rollback <RELEASE> [REVISION] [flags]

查看历史

helm history redis

回退到上一版本

helm rollback redis

回退到指定版本

helm rollback redis 3

你可能感兴趣的:(K8S入门与实战,kubernetes,容器,云原生)