1.Helm简介

  • Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。

  • Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。

  • 对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。

  • 对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。

在这里插入图片描述

Helm V3 与 V2 最大的区别在于去掉了tiller,见下图:

在这里插入图片描述本节使用的是 Helm V3

2. Helm的部署

Helm当前最新版本 v3.1.0 官网:https://helm.sh/docs/intro/

Helm安装:

下载软件包:helm-v3.1.1-linux-amd64.tar.gz
$ tar zxf helm-v3.1.1-linux-amd64.tar.gz
$ cd linux-amd64/
$ cp helm /usr/local/bin/

设置helm命令补齐:

echo "source <(helm completion bash)" >> ~/.bashrc

Helm 添加第三方 Chart 库:

helm repo add stable http://mirror.azure.cn/kubernetes/charts/   

helm search repo redis

在这里插入图片描述

[kubeadm@server1 ~]$ helm 
completion  get         list        repo        status      upgrade
create      history     package     rollback    template    verify
dependency  install     plugin      search      test        version
env         lint        pull        show        uninstall   
[kubeadm@server1 ~]$ helm 
[kubeadm@server1 ~]$ helm repo add stable http://mirror.azure.cn/kubernetes/charts/ 
"stable" has been added to your repositories
[kubeadm@server1 ~]$ 

3. Helm 部署应用(拉取仓库的redis-ha并部署)

在这里插入图片描述

[kubeadm@server1 helm]$ pwd
/home/kubeadm/helm
[kubeadm@server1 helm]$ ls
redis-ha
[kubeadm@server1 helm]$ cd redis-ha/
[kubeadm@server1 redis-ha]$ ls
Chart.yaml  ci  OWNERS  README.md  templates  values.yaml
[kubeadm@server1 redis-ha]$

我们重点关注的是 values.yaml文件 进行修改和编辑

案例:部署redis-ha,实现高可用

(1)将镜像拉取到本地harbor之后

在这里插入图片描述
(2)创建后查看:

[root@server1 redis-ha]# kubectl -n redis get all
NAME                    READY   STATUS    RESTARTS   AGE
pod/redis-ha-server-0   2/2     Running   0          28s
pod/redis-ha-server-1   2/2     Running   0          19s

NAME                          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
service/redis-ha              ClusterIP   None             <none>        6379/TCP,26379/TCP   29s
service/redis-ha-announce-0   ClusterIP   10.105.143.195   <none>        6379/TCP,26379/TCP   29s
service/redis-ha-announce-1   ClusterIP   10.101.152.37    <none>        6379/TCP,26379/TCP   29s

NAME                               READY   AGE
statefulset.apps/redis-ha-server   2/2     29s

可以看到创建了两个pod,其中server-0为master,还有两个svc和一个statefulset控制器。

(3)测试redis集群高可用

每个pod中有两个容器redis和sentinel,我们进入redis容器查看:

在这里插入图片描述

[root@server1 redis-ha]# kubectl -n redis exec -it redis-ha-server-0 -c redis -- sh
/data $ redis-cli
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:1
min_slaves_good_slaves:1
slave0:ip=10.101.152.37,port=6379,state=online,offset=25236,lag=0
master_replid:4baa1ff233604d357f9a5b2d6b100f90192d309c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:25236
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:25236

使用info Replication来查看主机信息,可以看出redis-ha-server-0为master主机。
执行SHUTDOWN命令来使主机宕机:

127.0.0.1:6379> SHUTDOWN
command terminated with exit code 137

宕机后控制器会马上帮我们启动一个pod

[root@server1 redis-ha]# kubectl get pod -n redis 
NAME                READY   STATUS    RESTARTS   AGE
redis-ha-server-0   2/2     Running   1          4m57s
redis-ha-server-1   2/2     Running   0          4m48s

等重建好了之后再次查看pod角色

[root@server1 redis-ha]# kubectl -n redis exec -it redis-ha-server-0 -c redis -- sh
/data $ redis-cli
127.0.0.1:6379> info Replication
# Replication
role:slave
master_host:10.101.152.37
master_port:6379
...

可以看出redis-ha-server-0已经变成了从机,而主机的ip为10.101.152.37,这时就实现了主从故障的切换。

主从故障切换依靠 sentinel容器完成。

(4)可以直接更改变量文件中的副本数量实现集群的动态拉伸

在这里插入图片描述
(5)使用upgrade选项更新集群

[root@server1 redis-ha]# helm -n redis upgrade redis-ha .

更新后查看pod可以看出已经变成了3个

[root@server1 redis-ha]# kubectl -n redis get pod
NAME                READY   STATUS    RESTARTS   AGE
redis-ha-server-0   2/2     Running   2          20m
redis-ha-server-1   2/2     Running   0          20m
redis-ha-server-2   0/2     Pending   0          12s

也可以使用以下命令查看更新历史以便回滚

[root@server1 redis-ha]# helm -n redis history 
Error: "helm history" requires 1 argument

Usage:  helm history RELEASE_NAME [flags]
[root@server1 redis-ha]# helm -n redis history redis-ha 
REVISION	UPDATED                 	STATUS    	CHART         	APP VERSION	DESCRIPTION     
1       	Sun May 10 23:15:35 2020	superseded	redis-ha-4.4.4	5.0.6      	Install complete
2       	Sun May 10 23:35:35 2020	deployed  	redis-ha-4.4.4	5.0.6      	Upgrade complete
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐