kubeadm join命令需使用)。swapoff -a # 临时关闭
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久关闭(注释掉fstab中的swap行)
setenforce 0 # 临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
/etc/hosts中添加节点IP与主机名映射(替换为实际IP和主机名):echo "<Master-IP> master-node" >> /etc/hosts
echo "<Worker1-IP> worker1-node" >> /etc/hosts
echo "<Worker2-IP> worker2-node" >> /etc/hosts
overlay和br_netfilter模块,执行以下命令:modprobe overlay
modprobe br_netfilter
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.d/k8s.conf
sysctl --system # 生效配置
Kubernetes依赖容器运行时管理容器,推荐使用Docker(也可选择containerd,但Docker更常用)。
curl -fsSL https://get.docker.com -o get-docker.sh
bash get-docker.sh # 自动安装Docker CE
systemctl enable docker && systemctl start docker
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
systemctl enable docker && systemctl start docker
Kubernetes的核心组件包括kubeadm(集群初始化工具)、kubelet(节点代理)、kubectl(命令行工具)。
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl # 锁定版本,防止自动更新
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
Master节点是集群的控制中心,负责管理节点、调度Pod、维护集群状态。
在Master节点上执行kubeadm init命令,指定Pod网络CIDR(需与后续网络插件兼容,如Flannel默认使用10.244.0.0/16):
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<Master-IP>
--pod-network-cidr:Pod网络的CIDR范围,需与网络插件要求一致。--apiserver-advertise-address:Master节点的IP地址,用于API Server通信。kubeadm join命令(包含Token和CA证书哈希),需保存备用(用于Worker节点加入集群)。kubectl是管理Kubernetes集群的命令行工具,需将Master节点的配置文件复制到当前用户目录:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl version,若能显示客户端与服务端版本信息,则配置成功。Kubernetes需要网络插件实现Pod之间的跨节点通信,推荐使用Flannel(轻量级、易部署)或Calico(功能丰富、支持网络策略)。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pods -n kube-system,查看网络插件Pod是否处于Running状态。Worker节点是集群的计算节点,负责运行容器化应用。
在Worker节点上执行Master节点初始化时输出的kubeadm join命令(替换为实际Token和CA哈希):
kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubeadm join命令,可在Master节点上重新生成:kubeadm token create --print-join-command
回到Master节点,执行以下命令查看集群节点状态:
kubectl get nodes
NotReady(需等待网络插件部署完成后变为Ready)。kubectl get nodes
Ready。部署一个Nginx应用,验证集群是否能正常调度Pod:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
--type=NodePort表示将服务暴露到节点端口,--port=80为容器端口。获取NodePort端口(替换为实际节点IP):
kubectl get svc nginx
http://<Master-IP>:<NodePort>或http://<Worker-IP>:<NodePort>,若看到Nginx欢迎页面,则部署成功。Dashboard是Kubernetes的Web管理界面,可通过以下命令安装:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl proxy开启代理,或使用Ingress暴露服务。生产环境建议部署高可用集群,包含多个Master节点(通过etcd集群保证数据一致性),可使用kubeadm的--control-plane-endpoint参数配置。
若应用需要持久化数据,可安装存储插件(如NFS、Ceph、Longhorn),并创建PersistentVolume(PV)和PersistentVolumeClaim(PVC)。
以上步骤覆盖了Linux环境下Kubernetes集群的基础部署流程,实际生产环境需根据需求调整配置(如网络插件选择、高可用设计、存储方案等)。部署完成后,建议定期备份etcd数据(集群核心数据),并监控集群状态(如使用Prometheus+Granafa)。