Ubuntu系统安装Kubernetes
更新说明
- 2024/01/02:
- 添加更具体的说明, 默认使用
v1.29.0
版本部署 - 添加rpm/apt的Kubernetes组件的安装说明
- 2023/12/28:
- Kubernetes版本选择: 截止目前,
Kubernetes
最新版本为v1.29.0
, 使用最新的版本进行安装 - 容器运行时: 使用
containerd
作为CRI
截止目前,containerd
最新版本为v1.7.11
- 本文的Shell操作仅支持在类Unix的机器环境执行, 带有RedHat和Ubuntu仅适合该类发行版的机器执行
前置
检查
验证每个节点的 MAC 地址和product_uuid是否唯一
- 您可以使用以下命令
ip link
获取网络接口的 MAC 地址,或者ifconfig -a
- 可以使用以下命令
sudo cat /sys/class/dmi/id/product_uuid
检查product_uuid
It is very likely that hardware devices will have unique addresses, although some virtual machines may have identical
values. Kubernetes uses these values to uniquely identify the nodes in the cluster. If these values are not unique to
each node, the installation process mayfail.
硬件设备很可能具有唯一的地址,尽管某些虚拟机可能具有相同的值。Kubernetes 使用这些值来唯一标识集群中的节点。如果这些值对于每个节点不是唯一的,则安装过程可能会失败。
检查网络适配器
If you have more than one network adapter, and your Kubernetes components are not reachable on the default route, we
recommend you add IP route(s) so Kubernetes cluster addresses go via the appropriate adapter.
如果你有多个网络适配器,并且你的 Kubernetes 组件在默认路由上无法访问,我们建议你添加 IP 路由,以便 Kubernetes 群集地址通过相应的适配器。
检查所需的端口
Theserequired portsneed to be open in order for
Kubernetes components to communicate with each other. You can use tools like netcat to check if a port is open. For
example:
这些必需的端口需要打开,以便 Kubernetes 组件相互通信。您可以使用 netcat 等工具检查端口是否打开
概念/名词解释
本文有对英文使用的专业名词的个人理解翻译, 当然在网络中也有对原英文有不同的理解翻译, 这里使用英文的中文对照:
- master节点, 即控制平面(control-plane)所在的节点, 负责控制/管理Pod的机器, master节点默认不会运行Pod(污点)
- workernode/工作节点/node节点, 即工作节点, 负责运行Pod的机器
- Kubeadm: Kubernetes的官方工具,用于快速部署Kubernetes集群
- Kubelet: Kubernetes节点上的主要组件,负责管理节点上的Pod和容器。它负责与Master节点通信,接收集群中的Pod创建请求,并确保Pod和容器在节点上正确运行
- kubectl: Kubernetes的命令行工具,用于与Kubernetes集群进行交互。通过kubectl,用户可以管理集群、部署应用、查看日志等
- containerd: 一个面向容器的运行时管理器,负责管理容器的生命周期,包括镜像、容器、快照等。它是Kubernetes v12.24.x版本之后默认的容器运行时
- crictl: 一个用于与Kubernetes容器运行时接口(CRI)进行交互的命令行工具,是Kubernetes与容器运行时之间的接口规范,用于定义容器运行时如何与Kubernetes进行通信和交互。CRI定义了一组API,使Kubernetes能够管理容器的生命周期、调度和资源管理等操作. 在Kubernetes集群中,当容器出现问题时,crictl可以帮助你进行调试和故障排除
- CNI(Container Network Interface/容器网络接口):
Kubernetes网络插件的标准接口,用于配置容器之间的网络连接。它定义了一组API,允许不同的网络插件与Kubernetes集成,实现容器之间的通信和网络隔离.
在安装CNI之后, 会添加类似
cni0
的网卡 - Flannel/Calico: Kubernetes集群的网络解决方案之一,用于提供容器之间的网络通信。它通过为每个节点分配子网来创建覆盖整个集群的容器网络,实现了跨节点的容器通信.
在安装之后, 会添加类似
flannel.1
的网卡
准备环境
机器配置至少为2C+2G的机器, 以下是本人配置
Ubuntu和RedHat系列(Centos/RockyLinux)操作系统是最受欢迎的Linux发行版之一, 此示例加入不同的操作系统作为工作节点, 方便使用者参考
节点类型 | 角色 | IP | 操作系统 | 推荐内存 | 包管理器 |
---|---|---|---|---|---|
master1 | control-plane | 192.168.0.151 | Ubuntu22.04 | 8Gi | apt |
master2 | control-plane | 192.168.0.152 | Ubuntu22.04 | 8Gi | apt |
node1 | worknode | 192.168.0.153 | Ubuntu22.04 | 24Gi | apt |
node2 | worknode | 192.168.0.154 | RedHat9 | 24Gi | yum/dnf |
node3 | worknode | 192.168.0.155 | RedHat9 | 24Gi | yum/dnf |
node4 | worknode | 192.168.0.156 | RedHat9 | 24Gi | yum/dnf |
如果是只有一个机器, 也可以作为控制平面和工作节点使用, 参考控制平面节点上调度 Pod
基础环境配置
开发Kubernetes端口
控制节点需要开启以下下端口:
协议 | 方向 | 端口范围 | 目的 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 6443 | Kubernetes API server | 所有 |
TCP | 入站 | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 |
TCP | 入站 | 10259 | kube-scheduler | 自身 |
TCP | 入站 | 10257 | kube-controller-manager | 自身 |
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp
工作节点需要开启以下下端口:
协议 | 方向 | 端口范围 | 目的 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 |
TCP | 入站 | 30000-32767 | NodePort Services† | 所有 |
sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp