简单讲下k8s怎么玩

直接给结论:K8s(Kubernetes)本质上就是一个“容器包工头”。你不用再自己登服务器去敲 docker run、盯进程死活、手动改 Nginx 配置,而是写一份 YAML 清单告诉 K8s“我要跑 3 个后端实例、占多少内存、对外暴露什么端口”,剩下的机器调度、挂了自动重启、扩缩容、流量分发全由它自动兜底。 玩转 K8s 只需要抓住三件事:懂 5 个核心概念、走通 1 套标准上线流程、掌握 4 个日常排错命令。 一、必须先搞懂的 5 个核心对象(按套娃顺序理解) 1. Pod(最小干活单元) K8s 不直接管单个容器,而是管 Pod。你可以把 Pod 理解成“一个独立的小虚拟机/共享网络命名空间”,里面通常只装 1 个你的业务容器(偶尔会挂个日志收集之类的辅助容器 Sidecar),同一个 Pod 里的容器共享同一个 IP 和端口。 2. Deployment(管副本和更新的监工) 你几乎不会直接手动建 Pod,因为 Pod 挂了就真没了。你真正创建的是 Deployment:在里面声明 replicas: 3,它就会自动帮你维持 3 个 Pod 在跑。哪台机器宕机或者某个 Pod OOM 挂了,Deployment 发现数量不对,立马在其他健康节点拉起一个新的;发版升级时,它还能帮你做滚动更新(先起新 Pod、健康检查过了再杀旧 Pod,不断服)。 3. Service(固定 IP 与内部负载均衡) Pod 是随时会死、随时会重建的,每次重建 IP 都会变,其他服务没法直接写死 IP 调它。Service 就是给这组 Pod 绑一个固定不变的虚拟 IP 和内部域名,不管后端的 Pod 怎么换血,调 Service 的名字就能自动把流量负载均衡到活着的 Pod 上。 4. Ingress(对外网关) Service 默认只能在集群内部互调。如果你想让外部用户通过域名(比如 api.xxx.com)访问你的服务,就配一个 Ingress,它相当于集群自带的云原生 Nginx,负责把外部 HTTP/HTTPS 流量按域名和路径路由到对应的 Service。 5. ConfigMap 与 Secret(配置与密码解耦) 别把配置文件、数据库密码写死在 Docker 镜像里。普通配置放 ConfigMap,密码密钥放 Secret,在 Pod 启动时作为环境变量或者文件挂载进去,改配置不用重新打镜像。 二、本地上手怎么玩(标准三步走) 第一步:本地起个单机集群练手 千万别一上来就去背组件架构或者用 kubeadm 手搓集群,直接装个轻量本地环境: Mac / Windows 直接开 Docker Desktop 自带的 Kubernetes,或者装 OrbStack(Mac 上极快)、Minikube、Kind(用 Docker 容器模拟 K8s 节点,轻量好用)。 第二步:写一个最简 YAML 把服务跑起来 日常开发就是写个 deployment.yaml(定义镜像、副本数、环境变量、资源限制 requests/limits 和存活探针 livenessProbe)加一个 service.yaml,然后敲一行: kubectl apply -f xxx.yaml K8s 就会自己去拉镜像、找节点、起容器、配网络。 第三步:日常操作与排错(记住这 4 个命令能解决 90% 的问题) 1. 看状态:kubectl get pods / svc / deploy(看 Pod 是不是 Running,重启次数多不多) 2. 查死因:kubectl describe pod <pod名>(Pod 卡在 Pending、ImagePullBackOff 或 CrashLoopBackOff 起不来时必看,最底下的 Events 会明确告诉你是因为内存不够、镜像拉不到还是健康检查没过) 3. 看日志:kubectl logs -f <pod名>(看业务容器的标准输出报错,如果刚崩溃重启过,加个 --previous 看上一次死掉前的遗言) 4. 进容器调试:kubectl exec -it <pod名> -- sh(相当于 docker exec,进去抓包或看文件) 如果嫌敲命令行累,装个 K9s(终端 UI 神器)或者 Lens,直接在界面上看日志、进终端、删 Pod,体验会爽很多。