1. Kubernetes 集群部署全流程解析
刚接触Kubernetes时,最让人头疼的就是从零开始搭建集群环境。记得我第一次尝试部署时,光是解决网络插件问题就折腾了整整两天。本文将分享一套经过生产环境验证的部署方案,涵盖从安装到网络测试的全流程,帮你避开那些我踩过的坑。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与组件安装
2.1 系统基础配置
在所有节点上执行以下配置(Master和Worker节点都需要):
bash复制# 关闭swap
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
# 设置主机名解析
cat <<EOF >> /etc/hosts
192.168.1.100 k8s-master
192.168.1.101 k8s-node1
192.168.1.102 k8s-node2
EOF
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
modprobe br_netfilter
modprobe ip_vs
重要提示:如果使用云服务器,部分云厂商的内核可能缺少必要模块,建议选择Ubuntu 20.04或CentOS 7.9等经过验证的系统版本。
2.2 容器运行时安装
推荐使用containerd作为运行时:
bash复制# 安装containerd
apt-get update && apt-get install -y containerd
# 生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改sandbox镜像为国内源
sed -i 's|k8s.gcr.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml
systemctl restart containerd
3. Kubernetes组件安装与初始化
3.1 使用kubeadm部署集群
Master节点执行:
bash复制# 安装kubeadm/kubelet/kubectl
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet=1.23.5-00 kubeadm=1.23.5-00 kubectl=1.23.5-00
apt-mark hold kubelet kubeadm kubectl
# 初始化控制平面
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.5 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.1.100
初始化成功后,按照提示配置kubectl:
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.2 Worker节点加入集群
在Worker节点执行Master初始化后输出的join命令:
bash复制kubeadm join 192.168.1.100:6443 --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx
常见问题:如果join token过期,可以在Master节点执行
kubeadm token create --print-join-command生成新命令。
4. 网络插件部署与验证
4.1 安装Flannel网络插件
在Master节点执行:
bash复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
检查部署状态:
bash复制kubectl get pods -n kube-system -l app=flannel
4.2 网络连通性测试
创建测试Pod:
yaml复制apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: busybox
image: busybox:1.28
command: ['sh', '-c', 'sleep 3600']
执行测试:
bash复制# 创建测试Pod
kubectl apply -f test-pod.yaml
# 进入Pod执行网络测试
kubectl exec -it test-pod -- sh
# 在Pod内测试
ping 10.244.1.2 # 其他Pod的IP
nslookup kubernetes.default.svc.cluster.local
curl http://<service-cluster-ip>
5. 生产环境优化建议
5.1 关键配置调整
修改kubelet配置提升稳定性:
bash复制cat <<EOF | sudo tee /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=--max-pods=110 \
--kube-reserved=cpu=500m,memory=500Mi \
--system-reserved=cpu=1000m,memory=1Gi
EOF
systemctl daemon-reload
systemctl restart kubelet
5.2 监控与排错工具
安装必备工具集:
bash复制# 网络诊断工具
kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
# 监控组件
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
6. 常见故障排查指南
6.1 节点NotReady问题排查
检查流程:
- 确认kubelet服务状态:
systemctl status kubelet - 检查容器运行时:
crictl ps - 查看kubelet日志:
journalctl -u kubelet -f - 验证网络插件:
kubectl logs -n kube-system <flannel-pod>
6.2 DNS解析失败处理
典型修复步骤:
bash复制# 检查CoreDNS运行状态
kubectl get pods -n kube-system -l k8s-app=kube-dns
# 验证DNS服务
kubectl run -it --rm --restart=Never dns-test --image=busybox:1.28 -- nslookup kubernetes.default
7. 版本升级注意事项
执行滚动升级前需要:
- 备份关键资源:
kubectl get all --all-namespaces -o yaml > cluster-backup.yaml - 升级kubeadm:
apt-get update && apt-get install kubeadm=1.24.0-00 - 升级控制平面:
kubeadm upgrade apply v1.24.0 - 排空节点:
kubectl drain <node> --ignore-daemonsets - 升级kubelet:
apt-get install kubelet=1.24.0-00
我在实际运维中发现,升级后最常见的兼容性问题来自网络插件,建议先在小规模测试环境验证网络功能。
