
在容器编排的世界中,Kubernetes(K8s)已成为最流行的解决方案。无论是开发测试环境还是生产环境,Kubernetes 都能提供出色的容器编排和管理能力。本教程将从基础的 Minikube 环境 开始,逐步带你搭建一个多节点 Kubernetes 集群,并深入讲解其中的关键概念、操作步骤和实际应用场景。
一、Kubernetes 基础知识
在开始之前,我们需要了解Kubernetes的核心概念:
- Pod:Kubernetes 最小的部署单元,包含一个或多个容器。
- Node:Kubernetes 集群中的一台物理机或虚拟机,每个节点运行必要的组件以维护 Pod 的运行。
- Master:集群控制平面,负责管理集群的状态和调度。
- kubectl:Kubernetes 命令行工具,用于与集群交互。
- Service:用于将一组 Pod 作为一个统一的网络服务进行暴露。
二、环境准备
在搭建 Kubernetes 集群之前,我们需要以下环境和工具:
硬件要求
- CPU:至少 2 核
- 内存:至少 4 GB(推荐 8 GB 以上)
- 存储:至少 20 GB 磁盘空间
- 网络:所有节点之间网络互通
软件要求
- Linux (Ubuntu 20.04/22.04) / CentOS 7/8 / Windows WSL2
- Docker (推荐版本 24.0.5+)
- kubectl (推荐版本 1.29.0+)
- Minikube (推荐版本 1.31.2+)
三、搭建Minikube环境 (单节点Kubernetes)
Minikube是Kubernetes官方提供的轻量化工具,适用于开发和测试环境。
1. 安装 Minikube
在 Linux 系统上安装 Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
验证安装是否成功:
minikube version
2. 启动 Minikube
启动 Minikube 并指定所需的资源参数:
minikube start --cpus=4 --memory=8192 --driver=docker
> `–driver=docker` 表示使用 Docker 作为容器运行时。
3. 验证 Minikube 集群状态
kubectl cluster-info
kubectl get nodes
4. 部署一个示例应用
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
minikube service hello-minikube
四、搭建多节点Kubernetes集群
在生产环境中,通常需要多个节点以实现更高的可用性和负载均衡。接下来,我们将使用 `kubeadm` 工具来搭建一个完整的 Kubernetes 集群。
1. 准备主机
在以下环境中完成设置:
- 1 台 Master 节点(控制平面)
- 2 台 Worker 节点(计算节点)
每台机器都需执行以下操作:
更新系统并安装依赖项
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg
安装 Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
配置 Docker 容器运行时
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl restart docker
sudo systemctl enable docker
安装 kubeadm、kubelet 和 kubectl
sudo apt install -y apt-transport-https
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-archive-keyring.gpg
echo "deb https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
2. 初始化 Master 节点
在 Master 节点上运行:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
配置 kubectl
mkdir -p HOME/.kube
sudo cp /etc/kubernetes/admin.confHOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config
验证 Master 状态:
kubectl get nodes
3. 配置网络插件 (Calico)
使用 Calico 提供 Pod 网络:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
4. 添加 Worker 节点
在 Master 节点初始化完成后,将得到 `kubeadm join` 命令,类似于:
kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
在每个 Worker 节点上执行该命令,即可将节点加入集群。
5. 验证集群状态
在 Master 节点上运行以下命令,查看节点状态:
kubectl get nodes
应显示 Master 和 Worker 节点,状态为 `Ready`。
五、部署示例应用
在完成集群搭建后,测试其功能。
部署 Nginx 应用
kubectl create deployment nginx-deployment --image=nginx
kubectl expose deployment nginx-deployment --type=NodePort --port=80
获取 Service 的 NodePort:
kubectl get services
访问 `http://<任意 Worker IP>:<NodePort>` 即可验证应用是否正常工作。
六、常见问题及解决方法
1. 无法拉取镜像
执行 `docker pull` 检查镜像是否存在。
如果网络问题导致镜像拉取失败,考虑配置国内镜像源(如阿里云)。
2. 节点状态为 `NotReady`
检查 `kubelet` 服务是否正常:`systemctl status kubelet`
查看日志:`journalctl -xeu kubelet`
3. Pod 网络不通
确认网络插件是否安装成功:`kubectl get pods -n kube-system`
通过本教程,您已经成功搭建了一个Kubernetes集群,并完成了Minikube 和多节点Kubernetes的部署。您可以根据自身业务需求进一步优化集群配置,并学习更多高级特性,如 Helm、Ingress Controller、Persistent Volumes 等,以更好地管理和扩展您的容器化应用。











