Kubernetes部署与运维07 Helm部署

287 阅读8分钟

Kubernetes目前大约每年发布三次,由于迭代速度快,目前市场上绝大部分的教程相对陈旧。更重要的是,从Kubernetes 1.20开始,Kubernetes官方宣布逐步弃用Docker作为容器运行时,并计划在Kubernetes 1.24版本中完全移除对Docker作为容器运行时的支持。这意味着,从Kubernetes 1.24版本开始,将不能使用Docker作为容器运行时来运行Kubernetes节点上的Pods。因此,市场上关于直接使用containerd容器运行时的新版Kubernetes教程几乎没有,更重要的是因为的Kubernetes涉及到镜像需要单独配置才能获取,这无疑拉高了初学者门槛。本教程采用互联网的形式进行发布,便于保持与Kubernetes最新版的同步,尽量自包含,便于读者学习、实践。

关键字Kubernetes 1.32; containerd; nerdctl; debain 12

![[Kubernetes部署与运维v3.png]]

整体规划

为方便后续内容学习,本部分将基于【Kubernetes部署与运维06 Metrtics Server部署】中的环境开展KubernetesHelm部署与学习。整体规划如下:

虚拟机名称IP地址主机名域名CPU核心内存角色
k8s_Master1_2G192.168.152.200master1master.rz22GBmaster
K8s_Worker1_2G192.168.152.201worker1worker1.rz12GBworker
K8s_Worker2_2G192.168.152.202worker2worker2.rz12GBworker

软件版本:

软件版本
helm3.17.0-1

参见【Kubernetes部署与运维02 Nerdctl Rootful部署】,Kubernetes基础环境各组件与版本信息如下:

- nerdctl: v1.7.7
- containerd: v1.7.22
- runc: v1.1.14
- CNI plugins: v1.5.1
- BuildKit: v0.15.2
- Stargz Snapshotter: v0.15.1
- imgcrypt: v1.1.11
- RootlessKit: v2.3.1
- slirp4netns: v1.3.1
- bypass4netns: v0.4.1
- fuse-overlayfs: v1.13
- containerd-fuse-overlayfs: v1.0.8
- Kubo (IPFS): v0.29.0
- Tini: v0.19.0
- buildg: v0.4.1

Kubernetes版本号为1.32

理论知识

【官方参考文档】

  • https://helm.sh/zh/docs/
  • https://helm.sh/zh/docs/intro/using_helm/

HelmKubernetes的包管理器,类似于PythonpipCentOSyum,或Ubuntuapt。主要用于管理ChartHelm Chart是用来封装Kubernetes原生应用程序的一系列yaml格式文件。可以在部署应用的时候自定义应用程序的一些Metadata,以便于应用程序的分发。

对于应用发布者而言,可以通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。对于使用者而言,使用Helm后不用需要编写复杂的应用部署文件,可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序。

Helm现在主要使用v3版:

  • Helm官方网址:https://helm.sh/zh/
  • Helm国内镜像:http://mirror.rancher.cn/http://mirror.cnrancher.com/

Helm的三大概念:

  • Chart代表着Helm包。它包含在Kubernetes集群内部运行应用程序、工具或服务所需的所有资源定义。可以把它视为Docker中的镜像、aptdpkg(包),或yumRPM(包)在Kubernetes中的等价物;
  • Repository(仓库)是用来存放和共享Chart的地方。它就像Ubuntu的软件源、Docker的镜像仓库,只不过它是供Kubernetes包所使用的;
  • Release是运行在Kubernetes集群中的Chart的实例。一个Chart通常可以在同一个集群中安装多次。每一次安装都会创建一个新的Release。它就像Docker中容器。以MySQL Chart为例,如果想在集群中运行两个数据库,可以安装该Chart两次。每一个数据库都会拥有它自己的ReleaseRelease name

在了解了上述这些概念以后,便可如此解释HelmHelm安装ChartsKubernetes集群中,每次安装都会创建一个新的Release。可以在HelmChart Repository中寻找新的Chart

案例实践

前期准备

1)同时开启三台虚拟机master1worker1worker2

2)在主节点master1上创建/root/software/helm/目录:

root@master1:~# mkdir /root/software/helm

Helm部署

【实践01-Helm部署】

在主节点master1上部署Helm

1)查看/usr/share/keyrings/目录内容:

root@master1:~# ll /usr/share/keyrings/
total 188
-rw-r--r-- 1 root root  8700 Jul 31  2023 debian-archive-bookworm-automatic.gpg
-rw-r--r-- 1 root root  8709 Jul 31  2023 debian-archive-bookworm-security-automatic.gpg
-rw-r--r-- 1 root root   280 Jul 31  2023 debian-archive-bookworm-stable.gpg
-rw-r--r-- 1 root root  8700 Jul 31  2023 debian-archive-bullseye-automatic.gpg
-rw-r--r-- 1 root root  8709 Jul 31  2023 debian-archive-bullseye-security-automatic.gpg
-rw-r--r-- 1 root root  2453 Jul 31  2023 debian-archive-bullseye-stable.gpg
-rw-r--r-- 1 root root  8132 Jul 31  2023 debian-archive-buster-automatic.gpg
-rw-r--r-- 1 root root  8141 Jul 31  2023 debian-archive-buster-security-automatic.gpg
-rw-r--r-- 1 root root  2332 Jul 31  2023 debian-archive-buster-stable.gpg
-rw-r--r-- 1 root root 56156 Jul 31  2023 debian-archive-keyring.gpg
-rw-r--r-- 1 root root 54031 Jul 31  2023 debian-archive-removed-keys.gpg

2)下载、转换并保存Helm GPG签名文件:

root@master1:~# curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | tee /usr/share/keyrings/helm.gpg > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1699  100  1699    0     0   1635      0  0:00:01  0:00:01 --:--:--  1636

root@master1:~# ll /usr/share/keyrings/                                          total 192
-rw-r--r-- 1 root root  8700 Jul 31  2023 debian-archive-bookworm-automatic.gpg
-rw-r--r-- 1 root root  8709 Jul 31  2023 debian-archive-bookworm-security-automatic.gpg
-rw-r--r-- 1 root root   280 Jul 31  2023 debian-archive-bookworm-stable.gpg
-rw-r--r-- 1 root root  8700 Jul 31  2023 debian-archive-bullseye-automatic.gpg
-rw-r--r-- 1 root root  8709 Jul 31  2023 debian-archive-bullseye-security-automatic.gpg
-rw-r--r-- 1 root root  2453 Jul 31  2023 debian-archive-bullseye-stable.gpg
-rw-r--r-- 1 root root  8132 Jul 31  2023 debian-archive-buster-automatic.gpg
-rw-r--r-- 1 root root  8141 Jul 31  2023 debian-archive-buster-security-automatic.gpg
-rw-r--r-- 1 root root  2332 Jul 31  2023 debian-archive-buster-stable.gpg
-rw-r--r-- 1 root root 56156 Jul 31  2023 debian-archive-keyring.gpg
-rw-r--r-- 1 root root 54031 Jul 31  2023 debian-archive-removed-keys.gpg
-rw-r--r-- 1 root root  1197 Jan 30 14:14 helm.gpg

若无法下载,请查看本教程最后的百度网盘下载链接,其中提供了本教程所涉及到的相关文件与资源。

3)可将helm.gpg备份一份至/root/software/helm目录:

root@master1:~# cp /usr/share/keyrings/helm.gpg /root/software/helm/

4)创建/etc/apt/sources.list.d/helm-stable-debian.list文件,内容如下:

deb [arch=amd64 signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main

5)安装指定版本的Helm,并锁定Helm版本不升级:

root@master1:~# apt update
Hit:1 http://mirrors.tuna.tsinghua.edu.cn/debian bookworm InRelease
Get:2 http://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates InRelease [55.4 kB]
Hit:3 https://mirrors.tuna.tsinghua.edu.cn/kubernetes/core:/stable:/v1.32/deb  InRelease
Get:4 https://baltocdn.com/helm/stable/debian all InRelease [7,652 B]
Get:5 https://baltocdn.com/helm/stable/debian all/main amd64 Packages [4,616 B]
Fetched 67.7 kB in 1s (51.0 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

root@master1:~# apt-cache madison helm
      helm |   3.17.0-1 | https://baltocdn.com/helm/stable/debian all/main amd64 Packages
      helm |   3.16.3-1 | https://baltocdn.com/helm/stable/debian all/main amd64 Packages
      helm |   3.16.2-1 | https://baltocdn.com/helm/stable/debian all/main amd64 Packages
...

root@master1:~# apt install helm=3.17.0-1
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  helm
...

root@master1:~# apt-mark hold helm
helm set on hold.

6)配置helm命令自动补全:

root@master1:~# helm completion bash >/etc/bash_completion.d/helm

7)使用helm search hub命令从,从Artifact Hub中查找并列出helm chartsArtifact Hub中存放了大量不同的仓库:

root@master1:~# helm search hub wordpress
URL                 CHART...   APP...   DESCRIPTION
.../wordpress-...   1.0.2      1.0.0    A Helm chart for...
.../kube-wordp...   0.1.0      1.1      this is my wordp...
.../bitnami/wo...   24.1.9     6.7.1    WordPress is the...
...

8)helm命令会提示helm配置文件所在位置:

root@master1:~# helm
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts
...

By default, the default directories depend on the Operating System. The defaults are listed below:

| Operating System | Cache Path          | Configuration Path   | Data Path               |
|------------------|---------------------|----------------------|-------------------------|
| Linux            | $HOME/.cache/helm   | $HOME/.config/helm   | $HOME/.local/share/helm |
...

Linux系统中配置文件存放路径为$HOME/.config/helm

国内大陆常用仓库:

仓库名(可自拟)仓库地址状态
aliyunhttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts可用
kaiyuanshe开源社http://mirror.kaiyuanshe.cn/kubernetes/charts可用
azurehttp://mirror.azure.cn/kubernetes/charts可用
bitnamihttps://charts.bitnami.com/bitnami可用
dandydevhttps://dandydeveloper.github.io/charts不稳

9)添加常用仓库:

root@master1:~# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories

root@master1:~# helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts
"kaiyuanshe" has been added to your repositories

root@master1:~# helm repo add azure http://mirror.azure.cn/kubernetes/charts
"azure" has been added to your repositories

root@master1:~# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

10)查看~/.config/helm/repositories.yaml,内容如下:

apiVersion: ""
generated: "0001-01-01T00:00:00Z"
repositories:
- caFile: ""
  certFile: ""
  insecure_skip_tls_verify: false
  keyFile: ""
  name: aliyun
  pass_credentials_all: false
  password: ""
  url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
  username: ""
- caFile: ""
  certFile: ""
  insecure_skip_tls_verify: false
  keyFile: ""
  name: kaiyuanshe
  pass_credentials_all: false
  password: ""
  url: http://mirror.kaiyuanshe.cn/kubernetes/charts
  username: ""
- caFile: ""
  certFile: ""
  insecure_skip_tls_verify: false
  keyFile: ""
  name: azure
  pass_credentials_all: false
  password: ""
  url: http://mirror.azure.cn/kubernetes/charts
  username: ""
- caFile: ""
  certFile: ""
  insecure_skip_tls_verify: false
  keyFile: ""
  name: bitnami
  pass_credentials_all: false
  password: ""
  url: https://charts.bitnami.com/bitnami
  username: ""

通过代理使用Helm需要说明两点。一点是当Helm获取ChartPlugin等时,会通过当前环境变量https_proxy来获取代理配置;另一点是当HelmKubernetes通信时,其不使用环境变量代理,这部分由Kuberneteskubeconfig处理。

收尾工作

1)使用poweroff命令,关闭三台虚拟机。

2)在VMware Workstation Pro中对三台虚拟机均拍摄快照,快照名为Helm 3.17.0-1部署完成

3)AI时代背景之下,运维将从传统CPU服务器切入到GPU服务器与端边设备,对于运维开发人员,技术玩家而言,也同步需要跟上新的技术栈。本学习内容涉及到的软件包、配置文件等资源,可以直接从百度网盘下载获取:

  • 百度网盘分享文件:Kubernetes1.32
  • 链接:https://pan.baidu.com/s/18XeGQ28BDPjHh8JKj0uZFQ?pwd=6x17 提取码:6x17