ping测试)。swapoff -a # 临时关闭
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久禁用(注释fstab中的swap行)
setenforce 0 # 临时关闭
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 永久设置为permissive模式
systemctl stop firewalld && systemctl disable firewalld # CentOS/Fedora
systemctl stop ufw && systemctl disable ufw # Ubuntu/Debian
/etc/hosts(确保节点间可通过主机名解析):sudo hostnamectl set-hostname <master-node> # 设置Master主机名
sudo hostnamectl set-hostname <worker-node1> # 设置Worker1主机名
# 在所有节点的/etc/hosts中添加节点IP与主机名映射
echo "<master-ip> <master-node>" | sudo tee -a /etc/hosts
echo "<worker1-ip> <worker-node1>" | sudo tee -a /etc/hosts
apt-transport-https、ca-certificates、curl、gnupg等基础依赖(以Ubuntu为例):sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
Kubernetes依赖容器运行时管理容器,推荐使用Docker(也可选择containerd、CRI-O):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker
docker version # 查看Docker版本及客户端/服务端状态
kubeadm用于集群初始化,kubelet负责节点管理,kubectl用于命令行操作:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本(防止自动升级导致兼容性问题)
kubeadm version # 查看kubeadm版本
kubelet --version # 查看kubelet版本
kubectl version --client # 查看kubectl客户端版本
Master节点是集群的控制平面,负责调度、API服务等核心功能:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
注:
--pod-network-cidr需与后续安装的网络插件(如Calico)的CIDR一致,否则会导致网络无法通信。
admin.conf复制到当前用户的.kube目录: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 # 此时应显示Master节点状态为NotReady(需安装网络插件后变为Ready)
Kubernetes需要网络插件实现Pod间的通信,常用插件包括Calico、Flannel、Weave Net等(以Calico为例):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pods -n kube-system # 查看kube-system命名空间下的网络插件Pod是否为Running状态
Worker节点负责运行应用Pod,通过kubeadm join命令将Worker节点加入集群(需使用Master初始化时输出的命令):
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
kubectl get nodes,若Worker节点状态显示为Ready,则表示加入成功。kubectl get nodes # 所有节点应显示为Ready
kubectl get pods --all-namespaces # 所有系统Pod应显示为Running或Completed
Dashboard提供可视化界面管理集群,部署命令如下:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
kubectl create serviceaccount dashboard-admin-sa
kubectl create clusterrolebinding dashboard-admin-sa --clusterrole=cluster-admin --serviceaccount=default:dashboard-admin-sa
kubectl get secret $(kubectl get sa dashboard-admin-sa -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token}}" | base64 -d
kubectl proxy启动代理,然后在浏览器访问http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/,输入Token登录。以上步骤为Kubernetes基础部署流程,生产环境中还需考虑高可用性(多Master节点)、安全加固(TLS证书、RBAC权限控制)、存储配置(PV/PVC)等高级需求。