什么是ref="/tag/2020/" style="color:#479099;font-weight:bold;">Kubernetes集群管理
Kubernetes,简称K8s,是目前最主流的容器编排系统。它能帮你自动化部署、扩展和管理容器化应用。比如你在公司上线一个电商网站,前端、后端、数据库都打包成容器,K8s就能统一调度这些容器,保证服务稳定运行。
所谓集群管理,就是对一组服务器(节点)组成的K8s集群进行配置、监控、升级和故障处理。这就像你家里的配电箱,每个开关控制不同的电器,而K8s就是那个智能总控台。
搭建一个基础集群
先准备两台以上的Linux服务器,推荐Ubuntu 20.04或CentOS 7以上版本。确保它们之间可以SSH互通,并关闭防火墙或开放必要端口。
在所有节点上安装Docker作为容器运行时:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker接着安装kubeadm、kubelet和kubectl:
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
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl初始化主节点
在选定的主节点执行初始化命令:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16完成后会输出一段kubeadm join命令,记得保存下来,后续添加工作节点要用。
配置普通用户访问K8s集群:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config安装网络插件
没有网络插件,Pod之间无法通信。Flannel是一个简单选择:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml添加工作节点
在其他服务器上执行之前保存的join命令,例如:
kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:1234...abcde稍等片刻,在主节点运行kubectl get nodes,应该能看到所有节点状态变为Ready。
部署一个应用试试
来部署一个Nginx服务验证集群是否正常:
kubectl create deployment nginx-app --image=nginx:alpine
kubectl expose deployment nginx-app --port=80 --type=NodePort使用kubectl get svc查看服务分配的端口,浏览器访问任意节点IP加端口,看到Nginx欢迎页就成功了。
日常维护操作
节点需要维护时,可以先将其设为不可调度:
kubectl drain worker-node-1 --ignore-daemonsets维护完再恢复:
kubectl uncordon worker-node-1查看所有Pod运行情况:
kubectl get pods -A某个Pod出问题了,直接看日志:
kubectl logs <pod-name> -n <namespace>备份与恢复
etcd是K8s的“大脑”,存着所有集群状态。定期备份很重要。如果用的是静态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 /backup/etcd-snapshot.db恢复时需停止kube-apiserver,执行恢复命令后再重启服务。
实际运维中,建议结合Velero这样的工具做集群级备份,更方便可靠。
常见问题处理
新节点加入后状态一直是NotReady?先检查kubelet是否运行:systemctl status kubelet。再查看日志:journalctl -u kubelet -n,常见问题是镜像拉取失败或网络插件没装好。
Pod一直Pending?用kubectl describe pod <name>看事件记录,可能是资源不足或节点污点未处理。
小公司刚开始用K8s,不建议一上来就搞高可用主节点。先跑单主节点,业务稳定后再扩展。就像学骑自行车,先会蹬再考虑装辅助轮还是碳纤维车架。