Docker与K8s组合使用最佳实践:零基础搭建与避坑指南

为什么你需要 Docker + K8s 这套组合

很多刚接触云原生的朋友会问:有了 Docker 为什么还要学 K8s?
简单说,Docker 负责把应用打包成轻量容器,而 K8s 负责管理这些容器的自动部署、扩缩容、故障恢复
生产环境中,单机 Docker 无法应对节点宕机、流量突增等场景,把 Docker 与 K8s 组合使用才是企业级的标配。
本文会带你从零搭建最小集群,并给出避坑要点。

前置准备:你需要什么

  • 两台或以上 Linux 服务器(推荐 Ubuntu 20.04/22.04,2核4G以上配置),一台作为 Master,其余作为 Node。
  • 所有节点之间网络互通,关闭交换分区(swap)。
  • 安装 Docker(版本建议 20.10+),所有节点 Docker 版本一致。
  • 安装 kubeadm、kubelet、kubectl(K8s 管理工具),版本锁定到同一小版本。

关键命令检查:

# 关闭 swap
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

# 安装 Docker(以 Ubuntu 为例)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io

# 设置开机启动
sudo systemctl enable docker && sudo systemctl start docker

分步搭建:初始化 K8s 集群

所有准备工作完成后,在 Master 节点执行初始化,注意替换 --pod-network-cidr 和 --apiserver-advertise-address。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100

初始化成功后,你会看到类似 kubeadm join ... 的命令,把它复制下来,之后在 Worker 节点上执行。
接着配置 kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件(很重要)

不装网络插件,集群节点间无法通信。
推荐 Flannel:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

等待大约一分钟,用 kubectl get nodes 查看所有节点状态为 Ready 即成功。

部署第一个应用验证集群

创建一个简单 nginx 部署:

kubectl create deployment nginx-test --image=nginx
kubectl expose deployment nginx-test --port=80 --type=NodePort
kubectl get svc  # 查看 NodePort 端口,比如 32080

浏览器访问任意节点 IP + 端口,如 http://192.168.1.100:32080,看到 nginx 欢迎页说明组合使用生效。

避坑指南:新手最容易踩的坑

  1. 版本不一致:Docker 和 K8s 组件版本必须匹配。官方有一个版本兼容性表(search "kubernetes release notes"),先用 kubeadm version 确认。
  2. 镜像拉不下来:国内环境建议配置 Docker 镜像加速器(阿里云、中科大),或者在初始化时指定 --image-repository registry.aliyuncs.com/google_containers
  3. 节点 NotReady:先查 kubectl describe node ,绝大多数原因是网络插件没装好或 coredns 没启动。执行 kubectl get pods -n kube-system 检查异常 pod。
  4. Pod 一直 Pending:通常是资源不足(CPU/内存),或者调度策略限制。用 kubectl describe pod 看事件。

生产环境额外建议

  • 使用 containerd 替代 Docker 作为容器运行时(性能更好,K8s 未来默认)。
  • 开启审计日志:--audit-log-path=/var/log/kubernetes/audit.log
  • 定期升级集群,建议每半年更新一次小版本。

如何验证你的组合使用是否高效

除了访问业务页面,还可以用以下命令检查集群健康状况:

# 节点状态
kubectl get nodes -o wide

# 系统组件状态
kubectl get componentstatuses

# 资源使用率(需要安装 metrics-server)
kubectl top nodes
kubectl top pods --all-namespaces

如果你成功运行了一个多副本应用(比如 kubectl scale deployment nginx-test --replicas=3),
然后手动关掉一台 Worker 节点,
发现 Pod 能自动漂移到其他节点,
说明 Docker 与 K8s 的组合发挥容错优势。这才是最佳实践的核心价值

遇到故障时,优先检查 kubelet 日志:journalctl -u kubelet -f,大多数问题都能在里面找到线索。
按照本文步骤操作,你就能搭建出一套稳定可用的容器编排环境。

分享到:
上一篇
AIOps智能运维实战经验:零基础搭建告警降噪体系
下一篇
Web安全实战攻防演练教程:零基础搭建测试环境与常见攻击手法
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意