1. 项目概述:Kubernetes集群在CentOS上的部署实践
在当今云原生技术蓬勃发展的背景下,Kubernetes(简称K8s)已成为容器编排领域的事实标准。本文将详细介绍在CentOS操作系统上部署生产级Kubernetes集群的完整流程与实战经验。不同于简单的单机版安装,我们将重点讲解多节点集群的部署方案,涵盖从系统准备到集群验证的全过程,特别适合需要在企业内网环境或物理服务器上搭建K8s集群的运维人员和开发者。
2. 环境准备与系统配置
2.1 硬件与网络要求
在开始部署前,需要确保基础设施满足以下基本要求:
-
服务器节点:至少3台物理机或虚拟机(1个Master+2个Worker),建议配置:
- CPU:4核以上(生产环境建议8核+)
- 内存:8GB以上(生产环境建议16GB+)
- 存储:系统盘50GB+,数据盘根据应用需求配置
-
网络环境:
- 所有节点间网络互通(建议千兆内网)
- 每个节点有固定IP地址
- 确保以下端口开放:
- Master节点:6443, 2379-2380, 10250-10252
- Worker节点:10250, 30000-32767(NodePort服务范围)
提示:在生产环境中,建议为etcd集群配置独立的SSD存储以获得最佳性能。
2.2 CentOS系统基础配置
在所有节点上执行以下系统级配置:
-
关闭SELinux(简化部署过程):
bash复制setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config -
关闭防火墙(或配置正确的防火墙规则):
bash复制systemctl stop firewalld systemctl disable firewalld -
禁用swap(Kubernetes 1.8+要求):
bash复制swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab -
配置内核参数:
bash复制cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system -
设置主机名解析(所有节点):
bash复制# 编辑/etc/hosts文件,添加所有节点IP和主机名映射 192.168.1.101 k8s-master 192.168.1.102 k8s-worker1 192.168.1.103 k8s-worker2
3. 容器运行时与Kubernetes组件安装
3.1 Docker安装与配置
Kubernetes支持多种容器运行时,这里以Docker为例:
-
安装Docker CE:
bash复制
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io -
配置Docker守护进程:
bash复制mkdir /etc/docker cat <<EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF -
启动并启用Docker:
bash复制systemctl enable docker && systemctl start docker
3.2 Kubernetes组件安装
在所有节点上执行以下步骤:
-
添加Kubernetes仓库:
bash复制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 -
安装kubelet、kubeadm和kubectl:
bash复制
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes -
启用kubelet服务:
bash复制systemctl enable kubelet && systemctl start kubelet
4. 集群初始化与节点加入
4.1 Master节点初始化
在Master节点上执行:
bash复制kubeadm init \
--apiserver-advertise-address=192.168.1.101 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers
初始化成功后,会输出类似以下信息:
code复制Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.1.101:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:12345...abcde
按照提示配置kubectl:
bash复制mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4.2 安装网络插件
这里选择Flannel作为网络插件:
bash复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4.3 Worker节点加入集群
在每个Worker节点上执行Master节点初始化时输出的join命令:
bash复制kubeadm join 192.168.1.101:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:12345...abcde
5. 集群验证与常用操作
5.1 检查集群状态
在Master节点上执行:
bash复制kubectl get nodes
正常输出应显示所有节点状态为Ready:
code复制NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 10m v1.28.2
k8s-worker1 Ready <none> 8m v1.28.2
k8s-worker2 Ready <none> 7m v1.28.2
5.2 部署测试应用
验证集群是否正常工作:
bash复制kubectl create deployment nginx --image=nginx
kubectl expose deployment ng
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容