Kubernetes 集群包管理器 Helm3 部署

简介: Kuberbetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是解决这个问题的。

一、前言

如果我们开发微服务架构应用,组成的应用多达几十或上百个,传统的资源文件的组织和管理应用方式就会力不从心了:

  • 很难管理、编辑和维护如此多的服务。每个服务都有若干配置,缺乏一个更高层次的工具将这些配置组织起来;
  • 不容易将这些服务作为一个整体统一发布。运维人员需要理解应用和服务之间的关系,然后按照逻辑执行资源文件,即缺少一种工具来定义应用与服务,以及服务与服务之间的关系;
  • 不能高效地共享和重用服务。比如两个 MySQL 服务,只是配置参数不同,但是使用资源文件需要重复执行。也就是说,不支持参数化配置和多环境配置。
  • 不支持应用版本管理。虽然可以通过命令:kubectl rollout undo进行回滚,但是只能到单个 Deployment,不支持整个应用的回滚。
  • 不支持对部署应用状态验证。比如是否能通过预定义的账号访问 MySQL。虽然 Kubernetes 有健康检查,但那是针对单个容器,我们需要应用(服务)级别的健康检查。Helm 能够解决上面这些问题,Helm 帮助 Kubernetes 成为微服务架构应用理想的部署平台

Kuberbetes 能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而 Helm 就是解决这个问题的。

二、简介

Helm 是 Kubernetes 的包(Chart)管理器。包管理器类似于我们在 Ubuntu 中使用的 apt、Centos 中使用的 yum 或者 Python 中的 pip 一样,能快速查找、下载和安装软件包,这里我们使用 Helm3 进行软件管理。

三、安装

1、先决条件

成功且正确安全地使用 Helm 需要具备以下先决条件。

  1. Kubernetes 集群
  2. 确定要应用于安装的安全性配置(如果有)
  3. 安装和配置 Helm

安装 Kubernetes 或有权访问集群

  • 必须安装 Kubernetes。对于 Helm 的最新版本,我们建议使用 Kubernetes 的最新稳定版本,在大多数情况下,它是第二最新的次要版本。
  • 还应该具有的本地配置副本 kubectl

注意:1.6 之前的 Kubernetes 版本对基于角色的访问控制(RBAC)的支持有限或不支持。

2、安装

2.1、在线安装

Helm 现在具有一个安装程序脚本,该脚本将自动获取最新版本的 Helm 并将其本地安装。

$ 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
Downloading https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

官方参考:https://helm.sh/docs/intro/quickstart/

2.2、下载安装

访问 Helm Github 下载页面 https://github.com/helm/helm/releases 找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。

# 下载Helm客户端
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz

# 接下来解压下载的包,然后将客户端放置到 /usr/local/bin/ 目录下:
# 解压 Helm
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz

# 复制客户端执行文件到 bin 目录下,方便在系统下能执行 helm 命令
cp linux-amd64/helm /usr/local/bin/
注意:helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上,否则 helm 将不可用。

3、配置仓库

Helm3 默认是不会添加 Chart 仓库, 需要添加常用的仓库:

helm repo add  elastic    https://helm.elastic.co
helm repo add  gitlab     https://charts.gitlab.io
helm repo add  harbor     https://helm.goharbor.io
helm repo add  bitnami    https://charts.bitnami.com/bitnami
helm repo add  incubator  https://kubernetes-charts-incubator.storage.googleapis.com
helm repo add  stable     https://kubernetes-charts.storage.googleapis.com

增加完仓库后, 需要执行更新命令, 将仓库中的信息进行同步 helm repo update

⚠️注意:

如果有的仓库不能正常解析, 请更换 DNS 地址, 在测试过程中, 发现有的能正常解析, 有的不能. 如果还不行, 就直接将域名和对应的地址写死在 Host 文件中. 或者配置代理

使用国内仓库:

helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "harbor" chart repository
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "gitlab" chart repository
...Successfully got an update from the "elastic" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈ Happy Helming!⎈

$ helm repo list
NAME            URL
elastic         https://helm.elastic.co
bitnami         https://charts.bitnami.com/bitnami
incubator       https://kubernetes-charts-incubator.storage.googleapis.com
stable          http://mirror.azure.cn/kubernetes/charts
aliyun          https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
gitlab          https://charts.gitlab.io
harbor          https://helm.goharbor.io

4、查询应用

命令:helm search repo

$ helm search repo rabbitmq
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
aliyun/rabbitmq                         0.6.21          3.7.3           Open source message broker software that implem...
aliyun/rabbitmq-ha                      1.0.0           3.7.3           Highly available RabbitMQ cluster, the open sou...
bitnami/rabbitmq                        7.2.1           3.8.5           Open source message broker software that implem...
stable/prometheus-rabbitmq-exporter     0.5.5           v0.29.0         Rabbitmq metrics exporter for prometheus
stable/rabbitmq                         6.18.2          3.8.2           DEPRECATED Open source message broker software ...
stable/rabbitmq-ha                      1.46.4          3.8.5           Highly available RabbitMQ cluster, the open sou...

4、查看安装包内容

helm inspect values

5、安装应用

helm install my-release bitnami/rabbitmq
helm install my-rabbitmq bitnami/rabbitmq -n default

## -n, --namespace 参数指定安装的命名空间, Helm3 可以在不同的命名空间中部署相同名称的应用
## -f values.yaml 使用自定义参数配置
## --set 设置自定义参数列表
## --dry-run --debug 模拟安装过程并打印配置信息

6、查看应用 chart 可配置参数

首先使用 helm show values {仓库名称}/{应用名称} 来查看对应应用的可配置参数:

helm show values bitnami/rabbitmq

7、自定义参数安装应用

Helm 中支持使用自定义 yaml 文件和 --set 命令参数对要安装的应用进行参数配置

7.1、方式一:使用自定义 values.yaml 文件安装应用

用自定义配置文件来配置安装应用的参数:

创建自定义配置文件 values.yaml

$ cat > values.yaml << EOF

image:
  registry: docker.io
  repository: bitnami/nginx
resources:
  limits: 
     cpu: 1000m
     memory: 1024Mi
  requests: 
     cpu: 1000m
     memory: 1024Mi

EOF

使用自定义配置文件运行应用:

helm install -f values.yaml bitnami/nginx

7.2、方式二:使用 --set 配置参数进行安装

使用如下:

helm install my-rabbitmq \
--set auth.username=admin,auth.password=admin,auth.erlangCookie=secretcookie,global.storageClass=rook-ceph-block \
bitnami/rabbitmq

# auth.username:RabbitMQ 应用程序用户名
# auth.password:RabbitMQ 应用密码
# auth.erlangCookie:Erlang cookie
# global.storageClass:用于动态配置的全局存储类,此处指定 ceph 存储类

官方指南:

https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq/#installing-the-chart

helm install my-rabbitmq \
>   --set auth.username=admin,auth.password=admin,auth.erlangCookie=secretcookie,global.storageClass=rook-ceph-block \
>     bitnami/rabbitmq
>     
NAME: my-rabbitmq
LAST DEPLOYED: Fri Jun 26 16:22:44 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **
Credentials:
echo "Username      : admin"
echo "Password      : $(kubectl get secret --namespace default my-rabbitmq -o jsonpath="{.data.rabbitmq-password}" | base64 --decode)"
echo "ErLang Cookie : $(kubectl get secret --namespace default my-rabbitmq -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 --decode)"
RabbitMQ can be accessed within the cluster on port  at my-rabbitmq.default.svc.
To access for outside the cluster, perform the following steps:
To Access the RabbitMQ AMQP port:
echo "URL : amqp://127.0.0.1:5672/"
kubectl port-forward --namespace default svc/my-rabbitmq 5672:5672
To Access the RabbitMQ Management interface:
echo "URL : http://127.0.0.1:15672/"
kubectl port-forward --namespace default svc/my-rabbitmq 15672:15672

$ kubectl get pods  -o wide
NAME                     READY   STATUS      RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
my-rabbitmq-0            1/1     Running     0          24m     10.244.2.66   k8s-node3   <none>           <none>

$ kubectl get pvc
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
data-my-rabbitmq-0   Bound    pvc-6e3c51c1-a4eb-439e-bb85-29df7a00ca0b   8Gi        RWO            rook-ceph-block   24m

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS      REASON   AGE
pvc-6e3c51c1-a4eb-439e-bb85-29df7a00ca0b   8Gi        RWO            Delete           Bound    default/data-my-rabbitmq-0   rook-ceph-block            24m

8、卸载应用

卸载应用,并保留安装记录:

helm uninstall my-rabbitmq -n default

## -n, --namespace 参数指定安装的命名空间, Helm3 可以在不同的命名空间中部署相同名称的应用

卸载应用,不保留安装记录:

helm delete my-rabbitmq -n default

查看全部应用(包含安装和卸载的应用)

$ helm list -n default  --all
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
my-rabbitmq     default         1               2020-06-26 16:22:44.57446662 +0800 CST  deployed        rabbitmq-7.2.1  3.8.5

9、升级应用

通过更新配置文件的方式来更新部署:

## values.yaml 参数配置文件
helm upgrade -f values.yaml my-rabbitmq bitnami/rabbitmq -n default

## 查看新配置是否生效
helm get values my-rabbitmq -n default

10、应用回滚

升级过程发生错误, 可以进行回滚, 操作过程为查看应用历史版本, 获取 REVISION 号后进行回滚操作

$ helm history my-rabbitmq -n default
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION
1               Tue Feb 25 11:30:06 2020        deployed        rabbitmq-6.17.4 3.8.2           Install complete

11、回滚到 1 版本

helm rollback my-rabbitmq 1 -n default
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1天前
|
存储 运维 监控
Kubernetes 集群的持续监控与性能优化策略
【5月更文挑战第11天】在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。随着其在不同规模企业的广泛采用,如何确保 Kubernetes 集群的高效稳定运行变得至关重要。本文将探讨一套系统的 Kubernetes 集群监控方法,并结合实践经验分享针对性能瓶颈的优化策略。通过实时监控、日志分析与定期审计的结合,旨在帮助运维人员快速定位问题并提出解决方案,从而提升系统的整体表现。
|
2天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
9 5
|
2天前
|
Kubernetes Linux Docker
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
Kubernetes详解(四)——基于kubeadm的Kubernetes部署
12 2
|
3天前
|
Kubernetes Java API
Kubernetes详解(三)——Kubernetes集群组件
Kubernetes详解(三)——Kubernetes集群组件
13 1
|
8天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
40 10
|
9天前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。
|
12天前
|
运维 Kubernetes 监控
Kubernetes 集群的监控与维护策略
【4月更文挑战第30天】 在现代云计算环境中,容器化技术已成为应用程序部署和管理的重要手段。其中,Kubernetes 作为一个开源的容器编排平台,以其强大的功能和灵活性受到广泛欢迎。然而,随之而来的是对 Kubernetes 集群监控和维护的复杂性增加。本文将探讨针对 Kubernetes 集群的监控策略和维护技巧,旨在帮助运维人员确保集群的稳定性和高效性。通过分析常见的性能瓶颈、故障诊断方法以及自动化维护工具的应用,我们将提供一套实用的解决方案,以优化 Kubernetes 环境的性能和可靠性。
|
12天前
|
运维 Kubernetes 监控
Kubernetes集群的持续性能优化策略
【4月更文挑战第30天】 在动态且不断扩展的云计算环境中,保持应用性能的稳定性是一个持续的挑战。本文将探讨针对Kubernetes集群的持续性能优化策略,旨在为运维工程师提供一套系统化的性能调优框架。通过分析集群监控数据,我们将讨论如何诊断常见问题、实施有效的资源管理和调度策略,以及采用自动化工具来简化这一过程。
|
12天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理策略
【4月更文挑战第30天】 在微服务架构日益普及的当下,容器化技术与编排工具如Kubernetes成为了运维领域的重要话题。有效的监控和日志管理对于保障系统的高可用性和故障快速定位至关重要。本文将探讨在Kubernetes环境中实施监控和日志管理的最佳实践,包括选用合适的工具、部署策略以及如何整合这些工具来提供端到端的可见性。我们将重点讨论Prometheus监控解决方案和EFK(Elasticsearch, Fluentd, Kibana)日志管理堆栈,分析其在Kubernetes集群中的应用,并给出优化建议。
|
12天前
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)