🚀 Kubernetes 集群搭建方案
这是一个详细的 Kubernetes 集群搭建指南,适用于 CentOS 7 环境。让我们一步步完成吧!📜
1️⃣ 服务器要求
- 数量:3 台服务器(虚拟机)
k8s-master
:192.168.113.120
k8s-node1
:192.168.113.121
k8s-node2
:192.168.113.122
- 最低配置:2 核 CPU、2G 内存、20G 硬盘
- 网络要求:最好能联网;若无法联网,需提供私有镜像仓库
2️⃣ 软件环境
- 操作系统:CentOS 7
- Docker:20+ 版本
- Kubernetes:1.23.6
3️⃣ 系统初始化
在所有节点执行以下操作,确保环境准备就绪!⚙️
3.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
🔥 关闭防火墙,避免端口冲突。
3.2 关闭 SELinux
SELinux 是 Linux 的安全子系统,默认启用可能影响 Kubernetes。
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭
3.3 关闭 Swap
Swap 是磁盘上的虚拟内存,可能干扰 Kubernetes 的内存管理。
swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭(注释掉 swap 挂载行)
3.4 设置主机名
hostnamectl set-hostname <hostname> # 例如 k8s-master、k8s-node1
hostname # 验证主机名
3.5 配置 Master 的 Hosts
在 k8s-master
上添加节点映射:
cat >> /etc/hosts << EOF
192.168.113.120 k8s-master
192.168.113.121 k8s-node1
192.168.113.122 k8s-node2
EOF
3.6 桥接 IPv4 流量到 iptables
确保 Kubernetes 的网络通信正常:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
3.7 时间同步
保持节点时间一致,避免集群问题:
yum install ntpdate -y
ntpdate time.windows.com
4️⃣ 所有节点安装组件
在所有节点(Master 和 Node)安装 Docker 和 Kubernetes 组件。
4.1 安装 Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
4.2 配置阿里云源
Docker 镜像加速
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
docker info # 验证配置
Kubernetes 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.aliyuncs.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyuncs.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
4.3 安装 kubeadm、kubelet、kubectl
- kubeadm:初始化和管理集群
- kubelet:运行在节点上,管理容器
- kubectl:命令行工具,操作集群
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet
kubelet --version
# 配置 Docker 使用 systemd cgroup
vim /etc/docker/daemon.json # 添加 {"exec-opts": ["native.cgroupdriver=systemd"]}
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
docker info | grep Driver # 验证驱动为 systemd
5️⃣ 节点初始化
5.1 部署 Kubernetes Master
在 k8s-master
执行:
kubeadm init \
--apiserver-advertise-address=192.168.113.120 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
初始化成功后,配置 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.2 加入 Kubernetes Node
在 k8s-node1
和 k8s-node2
执行 kubeadm join
命令(从 Master 初始化输出中获取,例如):
kubeadm join 192.168.113.120:6443 --token ye0jj6.o167p2j6w6iswakc \
--discovery-token-ca-cert-hash sha256:4cedeb6fe5fabca6a3446071627c84e11250223196662f707af11cc1cc2c6174
注意事项
- Token 丢失或过期:
- 获取现有 Token:
kubeadm token list
- 创建新 Token:
kubeadm token create
- 获取现有 Token:
- 获取 CA 证书 Hash:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
- 加入失败:
- 在 Master 上重新生成 Join 命令:
kubeadm token create --print-join-command
- 在 Node 上执行新命令,例如:
kubeadm join 192.168.113.120:6443 --token hpifm2.vmykiv1angcbppey \ --discovery-token-ca-cert-hash sha256:a9e9de7f36cde303f930ec7ec546e888b5e2fca957b4b60f6b05954cb2195c13
- 在 Master 上重新生成 Join 命令:
评论区