从零搭建K8s集群:单节点与多节点实战
实操入门——从零搭建K8s集群(单节点/多节点)
经过前两篇的学习,我们已经了解了K8s的基本概念和核心组件,今天就进入实操环节——从零搭建K8s集群。对于新手来说,搭建K8s集群可能会遇到各种问题,因此本文将分别介绍两种搭建方式:单节点集群(适合学习和测试)和多节点集群(适合模拟生产环境),并详细说明每一步操作,确保新手也能顺利完成搭建。
在开始搭建之前,我们需要先明确搭建环境的要求,无论是单节点还是多节点,每个节点都需要满足以下基础条件:
1. 操作系统:推荐使用CentOS 7.x、Ubuntu 18.04及以上版本(本文以CentOS 7.x为例);
2. 硬件配置:单节点集群至少需要2核CPU、2GB内存、20GB磁盘空间;多节点集群中,控制平面节点建议2核CPU、4GB内存,工作节点建议2核CPU、2GB内存;
3. 网络要求:所有节点之间能够互相通信,关闭防火墙(或开放K8s所需端口),禁用SELinux;
4. 软件要求:安装Docker(或其他容器运行时),设置主机名,配置主机映射,关闭swap分区(K8s要求禁用swap,否则会影响性能和稳定性)。
### 一、单节点集群搭建(使用kubeadm)
kubeadm是K8s官方提供的集群搭建工具,能够快速搭建一个符合标准的K8s集群,适合新手入门。单节点集群即控制平面节点和工作节点合二为一,无需额外部署工作节点,操作简单,适合学习和测试。
步骤1:环境准备(核心操作)
1. 关闭防火墙和SELinux:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
2. 关闭swap分区:
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
3. 设置主机名(以k8s-node1为例):
hostnamectl set-hostname k8s-node1
4. 配置主机映射(将主机名与IP绑定):
echo "192.168.1.100 k8s-node1" >> /etc/hosts(替换为自己的节点IP和主机名)
5. 安装Docker(容器运行时):
yum install -y docker
systemctl start docker && systemctl enable docker
步骤2:安装kubeadm、kubelet、kubectl
kubeadm负责集群的初始化,kubelet负责管理节点上的容器,kubectl是K8s的命令行工具,用于操作集群。
1. 添加K8s yum源:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
2. 安装组件(指定版本,避免版本兼容问题,本文以1.24.0为例):
yum install -y kubeadm-1.24.0 kubelet-1.24.0 kubectl-1.24.0
3. 设置kubelet开机自启:
systemctl enable kubelet
步骤3:初始化集群(核心步骤)
执行以下命令初始化控制平面,--image-repository指定阿里云镜像仓库(避免国外镜像拉取失败),--pod-network-cidr指定Pod网络网段(后续安装网络插件需要用到):
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
初始化成功后,会出现一段提示信息,包含集群接入命令(如kubectl config相关命令)和工作节点加入集群的命令(kubeadm join ...),请务必保存好这段信息,后续会用到。
步骤4:配置kubectl(让kubectl能够操作集群)
执行初始化成功后提示的命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
执行kubectl get nodes命令,若能看到节点状态为NotReady(未安装网络插件),说明初始化成功。
步骤5:安装网络插件(关键步骤,让Pod之间能够通信)
K8s集群必须安装网络插件才能实现Pod之间的通信,本文选择常用的flannel插件:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
安装完成后,等待几分钟,执行kubectl get nodes,若节点状态变为Ready,说明单节点集群搭建成功。
### 二、多节点集群搭建(1个控制平面+2个工作节点)
多节点集群更接近生产环境,需要1个控制平面节点和至少2个工作节点,搭建流程与单节点类似,核心区别是需要在工作节点上执行加入集群的命令。
步骤1:环境准备
按照单节点集群的环境准备步骤,分别配置3个节点(控制平面节点:k8s-master,IP:192.168.1.100;工作节点1:k8s-node1,IP:192.168.1.101;工作节点2:k8s-node2,IP:192.168.1.102),确保所有节点之间能够互相通信。
步骤2:安装组件
在3个节点上,分别安装Docker、kubeadm、kubelet、kubectl,操作与单节点一致。
步骤3:初始化控制平面节点
在k8s-master节点上,执行与单节点相同的初始化命令,保存好工作节点加入集群的命令。
步骤4:工作节点加入集群
在k8s-node1和k8s-node2节点上,执行控制平面初始化成功后提示的kubeadm join命令(例如):
kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
步骤5:安装网络插件
在控制平面节点上,安装flannel网络插件,操作与单节点一致。
步骤6:验证集群状态
在控制平面节点上执行kubectl get nodes,若3个节点的状态都为Ready,说明多节点集群搭建成功。
### 常见问题排查
1. 镜像拉取失败:检查yum源是否配置正确,或手动拉取镜像(kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers);
2. 节点状态NotReady:检查网络插件是否安装成功,或查看kubelet日志(journalctl -u kubelet)排查问题;
3. 工作节点无法加入集群:检查控制平面节点的防火墙是否关闭,或token是否过期(过期后可执行kubeadm token create --print-join-command重新生成)。
总结来说,使用kubeadm搭建K8s集群的核心步骤是:环境准备→安装组件→初始化控制平面→安装网络插件→工作节点加入(多节点)。搭建完成后,我们就可以在集群上部署容器应用了,下一篇文章我们将讲解如何在K8s集群上部署应用,以及常用的kubectl命令。
更多推荐
所有评论(0)