Ubuntu环境下快速部署Kubernetes(K8s)集群指南
Kubernetes(K8s)是容器编排的核心工具,快速部署集群能加速开发测试或小型项目落地。以下是基于Ubuntu系统的最快部署流程(以单机/单Master节点为例,支持后续扩展Worker节点):
系统要求
关键操作(所有节点均需执行)
sudo swapoff -a # 临时关闭
sudo sed -i '/ swap / s/1/g' /etc/fstab # 永久关闭(注释掉Swap行)
master,Worker节点命名为worker1);在所有节点的/etc/hosts文件中添加节点IP与主机名映射(示例):sudo hostnamectl set-hostname master # 设置Master主机名
echo "<master-ip> master" | sudo tee -a /etc/hosts # Master节点IP
echo "<worker1-ip> worker1" | sudo tee -a /etc/hosts # Worker节点IP
sudo apt-get update && sudo apt-get upgrade -y
K8s依赖Docker作为默认容器运行时(也可替换为containerd,但Docker更常用)。执行以下命令安装:
sudo apt-get update
sudo apt-get install -y docker.io # 安装Docker
sudo systemctl enable docker && sudo systemctl start docker # 开机自启并启动
# 验证安装(运行测试容器)
sudo docker run hello-world
这三个工具是K8s集群部署与管理的关键:
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
kubelet、kubeadm、kubectl(K8s集群初始化、节点管理、命令行工具):sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本,防止自动升级导致兼容性问题
Master节点负责集群管理(调度、API服务、控制器等),执行以下命令初始化:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 指定Pod网络CIDR(避免与本地网络冲突)
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)
K8s需要网络插件实现Pod间通信(如Flannel、Calico)。以下以Calico(高性能、支持网络策略)为例:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pods -n kube-system # 应显示Calico相关Pod状态为"Running"
若需扩展集群,将Worker节点加入Master节点(在Master节点初始化后,会输出kubeadm join命令,示例):
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
<master-ip>为Master节点IP,<token>和<hash>为kubeadm init输出的参数(需在10分钟内使用,过期则重新生成)。kubectl get nodes
若所有节点(Master+Worker)状态均为Ready,则说明集群部署成功。kubectl create deployment nginx --image=nginx # 创建Nginx Deployment
kubectl expose deployment nginx --port=80 --type=NodePort # 暴露为NodePort服务
kubectl get pods # 查看Pod状态(应为"Running")
kubectl get svc # 查看Service的NodePort(如30080)
访问http://<master-ip>:<NodePort>即可看到Nginx欢迎页面。NotReady:检查网络插件是否部署成功(kubectl get pods -n kube-system),或Docker/Kubelet服务是否运行(sudo systemctl status docker kubelet)。kubeadm join失败:重新生成kubeadm join命令(在Master节点执行kubeadm token create --print-join-command)。通过以上步骤,即可在Ubuntu系统上快速部署一个可扩展的K8s集群,满足开发测试或小型生产需求。