Kubernetes 入门实战指南
K8s 零基础实战:核心概念(Pod/Deployment/Service/声明式 API)、第一个部署、基本操作与 Dashboard。声明期望状态、控制器持续对齐的心智模型一篇建立。
直接回答:Kubernetes 用声明式 API 管理容器化应用——你描述期望状态(几个副本、什么镜像),控制器持续把现实对齐到期望。入门四件套:Pod(最小调度单位)、Deployment(副本与滚动更新)、Service(稳定访问入口)、kubectl(一切操作的命令行)。本地用 minikube/kind 起步。
核心概念速建
- Pod:一个或多个容器的组合,共享网络与存储——K8s 调度的最小单位
- Deployment:管理 Pod 副本集,声明镜像与副本数,滚动更新与回滚
- Service:给一组 Pod 稳定 IP/DNS 与负载均衡
- Namespace:逻辑隔离多团队/多环境
第一个部署
kubectl create deployment web --image=nginx:1.27
kubectl scale deployment web --replicas=3
kubectl expose deployment web --port=80 --type=NodePort
kubectl get pods -o wide # 看副本分布
以上镜像版本仅作命令演示,部署需选受支持版本并固定产物;NodePort 可能对节点网络暴露端口,本地学习可用 ClusterIP 配合 port-forward。以下为最小示例,不含生产所需的探针、资源 requests/limits 与安全上下文。
YAML 声明式写法(推荐团队使用):
apiVersion: apps/v1
kind: Deployment
metadata: { name: web }
spec:
replicas: 3
selector: { matchLabels: { app: web } }
template:
metadata: { labels: { app: web } }
spec:
containers: [{ name: nginx, image: nginx:1.27 }]
基本操作
kubectl logs <pod> # 日志
kubectl exec -it <pod> -- sh # 进容器
kubectl rollout status deployment/web
kubectl rollout undo deployment/web
kubectl describe pod <pod> # 排障第一动作(事件流)
部署后先确认期望副本已经就绪,再结合 kubectl describe 的事件与应用日志判断启动失败原因。Pod 显示 Running 不等于应用已经能够处理请求。
常见问题(FAQ)
Q:Pod 和容器有什么区别?
A:Pod 是容器的"舱位"——单容器 Pod 占绝大多数;多容器 Pod 用于紧耦合 sidecar(日志采集、代理)。
Q:为什么我的 Pod 一直 Pending?
A:kubectl describe pod 看事件——常见原因:资源不足无法调度、镜像拉取失败、PVC 未绑定。
Q:本地学习用 minikube 还是 kind?
A:都行。kind 面向容器化节点测试;minikube 提供可按需启用的 addons(如 metrics-server),需另核对插件维护与驱动支持。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。