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部署】中的环境开展Kubernetes的Helm部署与学习。整体规划如下:
| 虚拟机名称 | IP地址 | 主机名 | 域名 | CPU核心 | 内存 | 角色 |
|---|---|---|---|---|---|---|
k8s_Master1_2G | 192.168.152.200 | master1 | master.rz | 2 | 2GB | master |
K8s_Worker1_2G | 192.168.152.201 | worker1 | worker1.rz | 1 | 2GB | worker |
K8s_Worker2_2G | 192.168.152.202 | worker2 | worker2.rz | 1 | 2GB | worker |
软件版本:
| 软件 | 版本 |
|---|---|
helm | 3.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/
Helm是Kubernetes的包管理器,类似于Python的pip、CentOS的yum,或Ubuntu的apt。主要用于管理Chart。Helm 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中的镜像、apt的dpkg(包),或yum的RPM(包)在Kubernetes中的等价物;Repository(仓库)是用来存放和共享Chart的地方。它就像Ubuntu的软件源、Docker的镜像仓库,只不过它是供Kubernetes包所使用的;Release是运行在Kubernetes集群中的Chart的实例。一个Chart通常可以在同一个集群中安装多次。每一次安装都会创建一个新的Release。它就像Docker中容器。以MySQL Chart为例,如果想在集群中运行两个数据库,可以安装该Chart两次。每一个数据库都会拥有它自己的Release和Release name。
在了解了上述这些概念以后,便可如此解释Helm:Helm安装Charts到Kubernetes集群中,每次安装都会创建一个新的Release。可以在Helm的Chart Repository中寻找新的Chart。
案例实践
前期准备
1)同时开启三台虚拟机master1、worker1与worker2。
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 charts。 Artifact 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。
国内大陆常用仓库:
| 仓库名(可自拟) | 仓库地址 | 状态 |
|---|---|---|
aliyun | https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts | 可用 |
kaiyuanshe开源社 | http://mirror.kaiyuanshe.cn/kubernetes/charts | 可用 |
azure | http://mirror.azure.cn/kubernetes/charts | 可用 |
bitnami | https://charts.bitnami.com/bitnami | 可用 |
dandydev | https://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获取Chart、Plugin等时,会通过当前环境变量https_proxy来获取代理配置;另一点是当Helm与Kubernetes通信时,其不使用环境变量代理,这部分由Kubernetes的kubeconfig处理。
收尾工作
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