在 Ubuntu 上使用 Kubernetes 进行容器编排
一 环境准备
sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,避免 kubelet 启动失败。/etc/hosts 中添加映射,便于解析。ufw/iptables),确保 6443、10250、10251、10252、8472(Flannel VXLAN) 等端口可达。二 安装与初始化集群
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo apt update && sudo apt install -y apt-transport-https curl
curl -fsSL 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 update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 若使用 Calico,可按官方清单指定 CIDR,例如:--pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubeadm init 输出中的 kubeadm join ... 命令)。三 基本编排示例
kubectl create deployment nginx --image=nginx:1.25 --replicas=3
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get nodes -o wide
kubectl get pods -o wide
kubectl get svc nginx
# 临时本地访问
kubectl port-forward deployment/nginx 8080:80
# 或在浏览器访问 http://<任一节点IP>:<NodePort>
kubectl scale deployment nginx --replicas=5
kubectl set image deployment/nginx nginx=nginx:1.27
kubectl rollout status deployment/nginx
kubectl rollout undo deployment/nginx
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl exec -it <pod-name> -- sh
四 常用运维命令
kubectl get nodes
kubectl describe node <node-name>
kubectl top nodes
kubectl top pods
kubectl delete service nginx
kubectl delete deployment nginx
# 重置节点(谨慎:会清理本机 K8s 状态)
sudo kubeadm reset -f
五 常见问题与优化
--pod-network-cidr 与所选插件一致。# /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m" },
"storage-driver": "overlay2"
}
sudo systemctl restart docker