从零开始搭建Kuber***es (K8s) 集群
在这篇博客中,我们将详细介绍如何从零开始搭建 Kuber***es (K8s) 集群。本文涵盖了准备工作、安装必要组件、部署 K8s 的 Master 和 Node 节点,以及网络插件的配置。需要注意的是,由于 Kuber***es 版本迭代较快,某些组件可能无法向下兼容,请根据实际情况进行安装。
部署方式
目前生产部署 Kuber***es 集群主要有两种方式:
-
kubeadm:
-
kubeadm是一个 K8s 部署工具,提供了kubeadm init和kubeadm join,用于快速部署 K8s 集群。 - 官网地址: Kubeadm | Kuber***es
-
-
二进制包:
- 从 GitHub 下载发行版的二进制包,手动部署每个组件,组成 K8s 集群。
- 虽然
kubeadm降低了部署门槛,但屏蔽了很多细节,遇到问题时较难排查。如果想要更灵活和可控,推荐使用二进制包部署 K8s 集群,虽然手动部署麻烦,但可以学到更多工作原理,也有利于后期维护。
本文教程主要是展示kubeadm工具搭建kuber***es集群的过程。
准备工作(所有节点)
在开始部署之前,我们需要对所有节点进行以下准备工作。
1. 关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 禁止防火墙开机自启
systemctl disable firewalld
2. 关闭 SELinux
# 永久关闭 SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 重启系统使更改生效
reboot
# 临时关闭 SELinux
setenforce 0
3. 关闭 Swap 分区
# 永久关闭 Swap 分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 重启系统
reboot
# 临时关闭 Swap 分区
swapoff -a
注:
在搭建 Kuber***es 集群之前关闭防火墙、SELinux(Security-Enhanced Linux)以及禁用 swap 分区通常有以下原因:
1. 防火墙:
- Kuber***es 集群中的各个节点需要通过一系列网络端口进行通信,包括 API 服务器、kubelet、etcd 等。关闭防火墙可以避免阻碍节点之间的网络通信,确保集群的正常运行。
- 在生产环境中,建议使用网络策略(***work Policies)来限制 Pod 之间和 Pod 与外部的网络通信,而不是完全关闭防火墙。
2. SELinux:
- SELinux 是一个 Linux 内核的安全模块,用于强化系统的安全性。但是,它有时会与 Kuber***es 组件和容器运行时产生冲突,导致权限问题和功能受限。
- 关闭 SELinux 可以简化 Kuber***es 集群的配置和维护,避免潜在的权限问题。
3. 禁用 Swap 分区:
- Kuber***es 对内存的管理和调度依赖于 Linux 内核的内存管理机制。Swap 分区的存在可能导致内存调度行为不稳定,从而影响容器的性能和稳定性。
- Kuber***es 官方建议在所有集群节点上禁用 swap 分区,以确保容器可以充分利用主机的物理内存,并避免因为交换空间导致的性能问题。
虽然关闭防火墙、SELinux 和禁用 swap 分区可以简化 Kuber***es 的搭建和维护,但同时也会降低系统的安全性。在生产环境中,建议根据安全策略来适当配置防火墙规则,并针对 SELinux 进行合适的配置,以确保系统安全性和 Kuber***es 的正常运行。
4. 设置主机名
# 设置主机名(以 node1 为例)
hostnamectl set-hostname node1
# 或者直接修改 /etc/hostname 文件,内容为:
node1
在每个节点上添加 hosts 文件的配置:
cat >> /etc/hosts << EOF
10.154.22.10 Ubuntu-Server
10.152.193.47 k8sNode1
10.152.193.47 k8sNode2
10.152.193.47 k8sNode3
10.152.193.47 k8sNode4
10.152.193.47 k8sNode5
10.152.193.47 k8sNode6
...
EOF
5. 配置网络设置
为所有节点添加网桥过滤和地址转发功能:
cat > /etc/sysctl.d/k8s.conf << EOF
***.bridge.bridge-nf-call-ip6tables = 1
***.bridge.bridge-nf-call-iptables = 1
***.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 加载 br_***filter 模块
modprobe br_***filter
# 查看是否加载成功
lsmod | grep br_***filter
# 应用新的配置
sysctl --system
所有节点执行时间同步:
# 启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date
6. 安装 IPVS(可选,非必须)
安装 ipset 和 ipvsadm 在搭建 Kuber***es 集群中通常是为了使用 IPVS(IP Virtual Server)模式作为 Kuber***es 的服务代理模式。IPVS 是一种高性能的四层负载均衡器,可以提供更高的性能和更低的延迟,特别是在大规模的服务负载下。
以下是在每个节点上安装 ipset 和 ipvsadm 的步骤:
-
安装ipset:
- 在大多数 Linux 发行版中,ipset 包是作为软件包管理系统的一部分提供的,可以直接使用包管理器进行安装。例如,在基于 Debian/Ubuntu 的系统中,可以使用 apt 包管理器安装:
sudo apt update sudo
- 在大多数 Linux 发行版中,ipset 包是作为软件包管理系统的一部分提供的,可以直接使用包管理器进行安装。例如,在基于 Debian/Ubuntu 的系统中,可以使用 apt 包管理器安装: