1. 为什么需要Kubernetes集群工具
在容器化应用部署的早期阶段,你可能已经习惯了使用Docker的单机模式。但随着业务规模扩大,单台主机很快会遇到性能瓶颈。想象一下这样的场景:你的电商网站在促销期间流量激增,单台服务器上的容器实例已经无法承受;或者你的微服务架构中有数十个相互依赖的服务,手动管理它们的生命周期和网络通信变得异常复杂。
这就是Kubernetes(简称k8s)的用武之地。它像是一个智能的容器调度大师,能够自动将你的应用容器部署到多台机器组成的集群中,并根据负载情况动态调整资源分配。但要让这个"大脑"正常运转,我们需要先搭建好它的"神经系统"——这就是集群工具的作用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:搭建K8s集群的基础设施
2.1 硬件与操作系统要求
在开始安装前,确保你的机器满足以下最低配置:
- 至少2GB内存(推荐4GB以上)
- 2个CPU核心(推荐4核)
- 20GB可用磁盘空间
- 网络连接(集群节点间需要互通)
操作系统方面,我推荐使用Ubuntu 22.04 LTS或CentOS 7/8。这些发行版有较好的社区支持和文档资源。以Ubuntu为例,先进行基础系统更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
2.2 容器运行时安装
Kubernetes需要容器运行时来管理容器生命周期。虽然Docker不再是唯一选择,但它仍然是最常用的选项。以下是Docker安装步骤:
bash复制# 添加Docker官方GPG密钥
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
# 安装Docker引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
注意:如果遇到"virtualisation support not detected"错误,需要进入BIOS启用VT-x/AMD-v虚拟化支持。
3. 核心工具安装与配置
3.1 kubeadm、kubelet和kubectl
这三个是Kubernetes集群管理的核心工具:
- kubeadm:集群初始化工具
- kubelet:运行在集群各节点上的代理
- kubectl:集群管理命令行工具
安装命令如下:
bash复制# 添加Kubernetes仓库
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [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
# 安装工具
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 锁定版本防止自动升级
sudo apt-mark hold kubelet kubeadm kubectl
3.2 配置容器运行时接口(CRI)
Kubernetes通过CRI与容器运行时交互。我们需要配置containerd作为CRI:
bash复制sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
编辑配置文件,启用SystemdCgroup:
toml复制[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
然后重启服务:
bash复制sudo systemctl restart containerd
sudo systemctl enable containerd
4. 初始化Kubernetes集群
4.1 主节点初始化
使用kubeadm初始化主节点(控制平面):
bash复制sudo kubeadm init --pod-network-cidr=10.244.0.0/16
这个命令会:
- 进行一系列预检检查
- 生成CA证书和密钥
- 部署核心控制平面组件(API Server, Controller Manager, Scheduler等)
- 生成加入集群的token
重要:记下输出的kubeadm join命令,后续工作节点需要用它加入集群。
4.2 配置kubectl访问
为了让普通用户也能使用kubectl,需要配置kubeconfig:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
验证集群状态:
bash复制kubectl get nodes
此时节点状态应为NotReady,因为尚未安装网络插件。
5. 网络插件安装与集群扩展
5.1 安装Flannel网络插件
Kubernetes需要网络插件实现Pod间通信。Flannel是最简单的选择:
bash复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
等待几分钟后,再次检查节点状态:
bash复制kubectl get nodes
现在应该显示Ready状态。
5.2 添加工作节点
在其他机器上重复环境准备步骤(不运行kubeadm init),然后使用之前保存的join命令:
bash复制sudo kubeadm join <主节点IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
在主节点上验证节点加入情况:
bash复制watch kubectl get nodes
6. 常见问题排查与优化
6.1 初始化失败处理
如果kubeadm init失败,首先查看详细日志:
bash复制journalctl -xeu kubelet
常见问题及解决方案:
- 端口冲突:确保6443, 10250等端口未被占用
- 内存不足:至少需要2GB内存
- swap未禁用:Kubernetes要求禁用swap
bash复制sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab
6.2 节点NotReady状态排查
如果节点长时间处于NotReady状态:
bash复制# 检查kubelet状态
systemctl status kubelet
# 查看Pod状态
kubectl get pods -n kube-system
# 查看特定Pod日志
kubectl logs -n kube-system <pod-name>
6.3 性能优化建议
-
调整kubelet配置:
bash复制sudo vi /var/lib/kubelet/config.yaml增加以下参数:
yaml复制maxPods: 100 kubeAPIQPS: 50 kubeAPIBurst: 100 -
配置镜像仓库镜像(针对国内用户):
bash复制sudo vi /etc/containerd/config.toml添加:
toml复制[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] endpoint = ["https://registry-1.docker.io"]
7. 生产环境进阶配置
7.1 高可用控制平面
对于生产环境,建议部署多主节点实现高可用:
bash复制# 在第一主节点上获取证书
sudo kubeadm init phase upload-certs --upload-certs
# 在其他控制节点上执行
sudo kubeadm join <负载均衡IP>:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane --certificate-key <key>
7.2 使用外部etcd集群
默认的嵌入式etcd适合测试环境,生产环境应部署独立etcd集群:
bash复制kubeadm init --config=kubeadm-config.yaml
配置文件示例:
yaml复制apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: "192.168.1.100"
bindPort: 6443
nodeRegistration:
criSocket: "unix:///var/run/containerd/containerd.sock"
taints: null
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
etcd:
external:
endpoints:
- "https://etcd1:2379"
- "https://etcd2:2379"
- "https://etcd3:2379"
caFile: "/etc/kubernetes/pki/etcd/ca.crt"
certFile: "/etc/kubernetes/pki/etcd/client.crt"
keyFile: "/etc/kubernetes/pki/etcd/client.key"
7.3 集群备份与恢复
定期备份集群关键数据:
bash复制# 备份etcd
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save snapshot.db
# 备份kubeconfig和证书
sudo tar czvf kubernetes-backup.tar.gz /etc/kubernetes
