当前位置:网站首页>使用 Helm 3 包管理器在 Kubernetes 集群上安装软件
使用 Helm 3 包管理器在 Kubernetes 集群上安装软件
2022-07-20 14:56:00 【多鱼的夏天】
介绍
Helm是 Kubernetes 的包管理器,它允许开发人员和网络管理员员更轻松地在 Kubernetes 集群上配置和部署应用程序。
Helm 包称为charts,它们包含资源定义模板,这些模板可以部署和配置给定的应用程序,用户只需付出最少的工作。
使用模板,你可以通过传入变量定义来管理图表、其设置和行为,而无需修改实际图表。Helm 自动管理自定义资源定义以及对已部署定义的修改。具有可能自定义的已部署 chart 称为发布。
在本教程中,你将设置 Helm 3 并学习如何安装、升级、回滚和管理图表和版本。你还将学习创建和打包自己的图表,以及设置图表存储库,其中托管你可以立即安装的图表。
第 0 步 - 创建k8s环境
本教程采用CSDN 开发云提供了k8s学习环境,一键创建了k8s环境。CSDN 开发云k8s 学习环境按小时付费使用,每小时仅 0.1元。学习完毕后可以释放主机资源即会停止计费。
点这里一键拥有 k8s 环境。
你也可以使用其他方法创建自己的k8s集群。
点击【立即购买】后,几分钟后你可以拥有自己的k8s集群。
- 安装在本地计算机上的
kubectl
命令行工具,配置为连接到你的集群。kubectl
你可以在官方文档中阅读有关安装的更多信息。
你也可以使用 ssh 终端工具登录k8s集群主机,在服务器的终端中进行下面的操作
你可以使用以下命令测试你的连接性:
kubectl cluster-info
如果你没有收到任何错误,则你已连接到集群。如果你使用访问多个集群kubectl
,请确保通过运行以下命令来验证你是否选择了正确的集群上下文:
kubectl config get-contexts
以上命令列出可用的配置:
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* default default default
在这里,星号 ( *
) 表示我们已连接到default
集群。要切换集群,请运行:
kubectl config use-context <context-name>
当你连接到正确的集群后,继续执行步骤 1 开始安装 Helm。
第 1 步 — 安装 Helm 3
在本节中,你将使用官方提供的 shell 脚本安装 Helm 3 。
首先切换到/tmp
,你将在其中运行以下命令来存储安装脚本:
cd /tmp
使用以下命令下载脚本:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
你可以使用文本编辑器查看get_helm.sh
内容以确保其安全。
通过以下命令将其权限设置可执行:
chmod +x get_helm.sh
最后,运行它来安装 Helm 3:
./get_helm.sh
你将收到类似于以下内容的输出:
Downloading https://get.helm.sh/helm-v3.9.0-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
你的机器上安装了 Helm 3。现在你将了解charts存储库以及如何使用它们
第 2 步 — 设置图表存储库
Helm charts 存储在charts存储库中,任何人都可以托管。默认情况下,Helm 3 没有预配置任何存储库。以前版本的 Helm 包括一个中央charts存储库;然而,Helm 3 的设计演变为charts开发人员管理他们自己的存储库,从而允许更多的自由和更快的发布。这意味着对于你希望使用的每个chart,你需要确保将托管存储库添加到你的 Helm 安装中。
为了帮助你找到正确的存储库,你可以使用ArtifactHub.io ,这是一个由CNCF管理的开源网站,对Helm charts及其存储库进行分类。它还跟踪其他 CNCF 项目使用的流行和有用的图表,因此它不同于stable
以前版本的 Helm 使用的存储库。对于常见的项目,例如 Nginx ingresses 或 monitoring 工具,它是一个很好的选择。
你可以通过主页搜索要安装的chart。搜索nginx
将显示与其相关的所有chart。
搜索ingress-nginx
以在你的结果中找到它。选择由 Kubernetes 团队管理的社区版,点击以访问其页面。
每个chart都有一个详细说明它的功能的描述,以及将其存储库添加到你的安装和安装图表的命令。如果没有,你仍然可以通过按页面右侧的INSTALL按钮来获取必要的命令。
每个chart都有一个详细说明它的功能的描述,以及将其存储库添加到你的安装和安装图表的命令。
如果没有,你仍然可以通过按页面右侧的INSTALL按钮来获取必要的命令。
你可以单击命令旁边的蓝色按钮来复制它。对第一个命令执行此操作,然后运行它:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
要将存储库添加到 Helm,请运行helm repo add
. 它接受的参数是存储库的名称及其位置。
输出将是:
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config
"ingress-nginx" has been added to your repositories
其中的警告是因为k8s的配置文件不安全,同用户组的用户和其他用户都可以读取这个文件
解决这个告警,修改权限即可:
chmod g-rw ~/.kube/config
chmod o-r ~/.kube/config
运行 helm version
告警信息已经没有了
当你添加一个新的 repo 时,你需要通过运行让 Helm 知道它包含什么:
helm repo update
你将收到以下输出,表明更新成功:
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈
在这一步中,你已经了解了 ArtifactHub 及其提供的功能。你还向 Helm 安装添加了一个新的存储库。在下一步中,你将安装 Helm chart。
第 3 步 — 安装 Helm Chart
在上一节中,你已为ingress-nginx
chart 添加了存储库。你现在将其安装到你的集群中。
每个chart都有配置变量,你可以设置这些变量来修改其行为。这些变量存储在一个名为的文件中,该文件values.yaml
是图表的一部分。除非你已将图表下载到你的计算机上,否则你必须运行以下命令才能查看它:
helm show values <chart_name>
要显示 的可用变量ingress-nginx
,请替换chart_name
:
helm show values ingress-nginx/ingress-nginx
将输出 ingress-nginx 的 values.yaml 内容,内容非常多
要安装chart,你可以使用helm install
命令,格式如下:
helm install <release_name> <repository/chart_name>
release_name 是chart部署的实例*,*在这里命名为ingress-nginx
。
此命令将使用变量的默认值将图表安装到你的集群中。如果你想修改其中的一些,你可以使用以下方法传入新的变量值--set
:
helm install ingress-nginx/ingress-nginx --set variable_name=variable_value
你可以根据需要重复任意--set
数量的变量。由于我们现在不会自定义它,因此通过运行按原样安装它:
helm install ingress-nginx ingress-nginx/ingress-nginx
将输出类似于以下内容:
NAME: ingress-nginx
LAST DEPLOYED: Sat Jul 9 16:02:19 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
An example Ingress that makes use of the controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
namespace: foo
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- pathType: Prefix
backend:
service:
name: exampleService
port:
number: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>
type: kubernetes.io/tls
请注意,NAME
对应于你指定的版本名称。Helm 还列出了常见信息,例如发布状态和部署它的命名空间。该NOTES
部分因 chart 而异,通常包含快速入门指南或在使用图表资源时对一些常见陷阱的警告。在这里,它指出正在创建负载均衡器,并且可能需要一些时间才能完成。
要检查已部署的chart,请使用helm list
:
helm list
你会发现ingress-nginx
是目前唯一部署的chart:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2022-07-09 07:25:32.861880478 +0800 CST deployed ingress-nginx-4.1.4 1.2.1
你可以通过运行以下命令找到它在集群中的服务:
kubectl get services
输出将与此类似:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 116.196.125.86 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m
现在你已将发布部署到集群,你将在部署时修改其配置。
第 4 步 — 升级版本
部署发布后,你无需在需要更改其配置时将其拆除并完全重新部署。你可以使用该helm upgrade
命令使用新版本的chart 升级发行版,或设置新设置。
该ingress-nginx
chart 公开了controller.replicaCount
控制已部署控制器 pod 数量的变量。默认情况下,它设置为 1,你可以通过列出可用的 pod 来查看:
kubectl get pods
你会发现只有一个:
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m
如果你希望部署更多的实例以实现高可用(例如,三个),你可以通过运行upgrade
释放并将变量设置为3
:
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values
你还传入--reuse-values
,它指示 Helm 将你的更改基于已部署的版本,保留以前的配置。
在输出中,Helm 将修改版本以表示版本已升级:
NAME: ingress-nginx
LAST DEPLOYED: Sat Jul 9 16:02:19 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...
你可以通过运行列出可用的 pod:
kubectl get pods
你会发现列出了三个 pod,而不是一个:
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c54d79885-6sb8z 1/1 Running 0 21h
ingress-nginx-controller-7c54d79885-qrwf6 1/1 Running 0 27h
ingress-nginx-controller-7c54d79885-fzrc8 1/1 Running 0 21h
接下来,你将回滚更改并完全删除版本。
第 5 步 — 回滚和删除版本
当你upgrade
发布时,其修订号会增加。在内部,Helm 存储版本的所有修订,允许你在需要时返回到以前的修订。
要将 pod 的数量恢复为只有一个,你可以helm upgrade
再次运行并手动设置数量,因为这是一个很小的变化。但是,当使用具有许多变量的chart时,手动还原是不优雅的。
要回滚版本,请使用helm rollback
:
helm rollback <release_name> <release_revision>
你可以使用它ingress-nginx
通过回滚到修订来恢复你所做的更改1
:
helm rollback ingress-nginx 1
你将收到以下输出,表明操作成功:
Rollback was a success! Happy Helming!
你可以通过列出版本来检查当前版本:
helm list
你会发现修订版是 3
,而不是1
:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2022-07-10 21:53:57.94583986 +0800 CST deployed ingress-nginx-4.1.4 1.2.1
Helm 将每个更改(包括回滚)视为对发布的新修订。你可以通过运行以下命令检查已部署 pod 的数量来检查修订3
是否等于第一个:
kubectl get pods
你会发现只有一个:
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c54d79885-6sb8z 1/1 Running 0 22h
要删除版本及其所有修订,你可以使用helm delete
:
helm delete <release_name>
由于你不再需要它,请ingress-nginx
通过运行以下命令删除:
helm delete ingress-nginx
输出将是:
release "ingress-nginx" uninstalled
你可以列出版本以检查是否没有:
helm list
输出表将没有行:
NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
现在该版本已被删除,你可以在未来的部署中重用其名称。
第 6 步 - 创建自定义图表
在此可选步骤中,你将了解如何创建自定义chart、将资源定义放置在何处以及如何将其打包以供进一步分发。
你将创建一个名为 的新chart example-chart
。运行以下命令来创建它:
helm create example-chart
这将创建一个名为example-chart
以下文件和结构的新目录:
example-chart/
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── NOTES.txt
│ ├── serviceaccount.yaml
│ ├── service.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
你将安装在目标集群上的资源,定义位于该templates
目录中。
Helm 创建的默认部署是一个 Nginx 入口控制器。尽管它们的文件扩展名是 YAML,但它们使用 Go 的模板语法通过你可以传入的公开变量保持可定制性。你可以通过运行以下命令显示service.yaml
内容:
cat example-chart/templates/service.yaml
你会发现它支持模板指令,双括号括起来的是模板语法
apiVersion: v1
kind: Service
metadata:
name: {
{
include "example-chart.fullname" . }}
labels:
{
{
- include "example-chart.labels" . | nindent 4 }}
spec:
type: {
{
.Values.service.type }}
ports:
- port: {
{
.Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{
{
- include "example-chart.selectorLabels" . | nindent 4 }}
引用的变量的值在文件values.yaml
中定义。
部署后 Helm 显示的NOTES
文本存储在 中NOTES.txt
,并且也是模板化的。
chart 元数据,例如部署的软件的名称、版本和版本,在文件Chart.yaml
中指定:
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"
要检查 Helm 将部署什么,你可以传入--dry-run
并--debug
指向helm install
chart目录:
helm install example-chart --dry-run --debug ./example-chart
输出将很长,并包含将应用于你的集群的所有最终资源定义。在修改图表后,你可以使用helm upgrade
将新版本推送到 Kubernetes。
当需要分享你完成的chart时,你可以通过运行下面将其打包以进行分发:
helm package ./example-chart
输出将是:
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz
可以像添加存储库中的一样安装打包的图表:
helm install example-chart example-chart-0.1.0.tgz
在此步骤中,你创建并部署了一个自定义图表。你还打包了它,并了解了它的结构。
结论
你现在知道如何使用 Helm 安装和升级部署软件到 Kubernetes 集群。
你已经添加了chart 存储库,并了解了如何使用 ArtifactHub找到它们。
你还创建了一个新的自定义chart 并了解了版本修订以及如何在必要时回滚。
有关创建自定义图表的更多信息,请访问官方指南。
边栏推荐
猜你喜欢
随机推荐
Client and server of grpc magiconion Library (case version)
[HMS core], [FAQ], [Health Kit] encountered some small problems in the process of integrating sports health services. Today, I share with you (Huawei watch, Bracelet + sports health service problems C
WPF 实现 RichTextBox 关键字查询高亮
移动端 触摸事件
二进制数求反(C语言)
Binary number inversion (C language)
Grpc MagicOnion库 之 客户端和服务端 (案例版)
可以将网址在线打包封装成APK系统的完全开源源码
【Harmony OS】【FAQ】鸿蒙应用开发问题分享(字体/构造器)
Hardware analysis and detailed explanation of RC series and parallel frequency selection network characteristics
[composition principle V system bus]
vscode安装及配置
[argoverse] argoverse API installation
The principle of sharepreference and the problem of cross process data sharing
Layoutinflater layout rendering tool
Add element at the beginning of array in JS
2022 Henan Mengxin League game (2)
DOS assembler improvement exercise
GUI 基础应用
About the basic setup of win7/win10 system installation