CentOS 7 部署 Kubernetes 1.20.1

Kubernetes 是一个开源的容器编排平台,它提供了强大的工具来自动化部署、扩展和管理容器化应用程序。在本技术博客中,我们将详细介绍如何在 CentOS 7 系统上部署 Kubernetes 1.20.1 版本。通过本文,你将了解到部署前的准备工作、各个组件的安装配置流程,以及最终的验证步骤。

目录#

  1. 部署前准备
  2. 安装 Docker
  3. 安装 kubeadm、kubelet 和 kubectl
  4. 初始化主节点
  5. 加入工作节点
  6. 部署网络插件
  7. 验证部署
  8. 总结与参考

部署前准备#

在开始部署 Kubernetes 之前,你需要确保以下环境已经准备就绪:

  • 操作系统:CentOS 7.x,建议使用最新的稳定版。
  • 硬件资源:至少 2GB 内存和 2 个 CPU 核心的服务器,推荐使用多台服务器进行集群部署。
  • 网络连接:所有节点之间能够相互通信,并且可以访问外网。
  • 关闭防火墙和 SELinux:防火墙和 SELinux 可能会影响 Kubernetes 组件之间的通信,需要关闭它们。
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
 
# 关闭 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
  • 配置节点主机名和 hosts 文件:为每个节点设置唯一的主机名,并在所有节点的 /etc/hosts 文件中添加节点的 IP 地址和主机名映射。
# 设置主机名(以主节点为例)
hostnamectl set-hostname kube-master
# 编辑 /etc/hosts 文件
vim /etc/hosts
# 添加以下内容(根据实际情况修改 IP 和主机名)
192.168.1.100 kube-master
192.168.1.101 kube-worker1
192.168.1.102 kube-worker2
  • 启用 IPv4 转发和桥接网络:Kubernetes 需要启用 IPv4 转发和桥接网络。
# 启用 IPv4 转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 启用桥接网络
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
sysctl -p

安装 Docker#

Kubernetes 使用 Docker 作为容器运行时,因此需要先安装 Docker。

# 添加 Docker 仓库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
# 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io
 
# 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker

配置 Docker 使用 systemd 作为 cgroup 驱动,在 /etc/docker/daemon.json 文件中添加以下内容:

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启 Docker 服务:

systemctl restart docker

安装 kubeadm、kubelet 和 kubectl#

kubeadm 是用于初始化 Kubernetes 集群的工具,kubelet 是运行在每个节点上的代理,负责管理容器和 Pod,kubectl 是用于与 Kubernetes 集群进行交互的命令行工具。

# 添加 Kubernetes 仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
 
# 安装指定版本的 kubeadm、kubelet 和 kubectl
yum install -y kubelet-1.20.1 kubeadm-1.20.1 kubectl-1.20.1
 
# 启动 kubelet 并设置开机自启
systemctl start kubelet
systemctl enable kubelet

初始化主节点#

在主节点上使用 kubeadm 初始化 Kubernetes 集群。

# 初始化主节点
kubeadm init --kubernetes-version=1.20.1 --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16

参数说明:

  • --kubernetes-version:指定 Kubernetes 版本。
  • --apiserver-advertise-address:指定 API Server 的 IP 地址。
  • --pod-network-cidr:指定 Pod 网络的 IP 地址范围,这里使用的是 Flannel 网络插件的默认范围。

初始化成功后,会输出一些提示信息,按照提示执行以下命令来配置 kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

同时,你会看到一个 kubeadm join 命令,这个命令用于将工作节点加入到集群中,请保存好这个命令。

加入工作节点#

在每个工作节点上执行之前保存的 kubeadm join 命令,例如:

kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

执行成功后,工作节点就会加入到 Kubernetes 集群中。

部署网络插件#

为了让 Pod 之间能够相互通信,需要部署网络插件。这里我们使用 Flannel 网络插件。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

等待一段时间,直到所有 Pod 都处于运行状态。

kubectl get pods -n kube-system

验证部署#

验证 Kubernetes 集群是否正常部署。

# 查看节点状态
kubectl get nodes

如果所有节点的状态都是 Ready,则说明集群部署成功。

# 运行一个简单的 Pod 进行测试
kubectl run nginx --image=nginx --port=80
# 查看 Pod 状态
kubectl get pods

如果 Pod 的状态是 Running,则说明 Pod 正常运行。

总结与参考#

通过以上步骤,你已经成功在 CentOS 7 系统上部署了 Kubernetes 1.20.1 集群。在实际使用中,你还可以根据需要进行更多的配置和管理。

参考资料#

希望本文对你有所帮助,如果你在部署过程中遇到任何问题,可以参考以上资料或在社区中寻求帮助。