5
0

k8s

2025-12-04
2026-09-07

K8s 入门基础理论

K8s(Kubernetes)的核心是「容器编排平台」—— 简单说,就是帮你自动化管理大量容器(比如 Docker 容器)的 “管家系统”,不用手动启停、扩容、排错,适合部署微服务、网站、后台应用等。

K8s 核心定位:为什么需要它?

没有 K8s 时,你可能要手动做这些事:

  • 容器挂了,得自己重启;
  • 访问量变大,得手动加容器;
  • 容器 IP 变了,得手动改访问地址;
  • 多环境(开发 / 测试 / 生产)的容器容易混乱。

K8s 核心目标:解决 4 大痛点

  1. 自动化部署:一键启动成百上千个容器,不用逐个操作;
  2. 自愈能力:容器挂了、节点崩了,自动重建容器,不用人工干预;
  3. 弹性扩缩容:根据访问量自动加 / 减容器数量(比如双 11 扩容,平时缩容);
  4. 服务发现与负载均衡:给容器分配固定访问地址,自动分发请求到多个容器,避免单点故障。

必记核心概念

概念 通俗类比 规范定义 核心作用(为什么需要它)
集群(Cluster) 整个小区 由 1 个或多个 Node 组成的集合,是 K8s 的 “运行环境”。 容纳所有应用和资源,是 K8s 的 “大容器”。
节点(Node) 小区里的一栋楼 集群中的物理机或虚拟机,是运行容器的 “硬件载体”。 提供 CPU、内存等硬件资源,Pod 必须运行在 Node 上。
命名空间(Namespace) 楼里的单元楼(1 单元、2 单元) 集群内的资源隔离抽象,相当于 “资源文件夹”。 1. 隔离多环境(开发 / 测试 / 生产),避免资源冲突;2. 控制资源配额(比如给开发环境分配 2 核 4G 内存)。
Pod 单元楼里的一套房子 K8s 最小部署单元,包含 1 个或多个关联容器,共享网络和存储。 K8s 不直接管理容器,通过 Pod 封装容器 —— 相当于给容器加了 “管理外壳”,方便 K8s 调度和监控。
控制器(以 Deployment 为例) 房子的管家 管理 Pod 生命周期的 “自动化程序”,常见类型:Deployment(无状态应用)、StatefulSet(有状态应用)。 1. 自愈:Pod 挂了自动重建;2. 扩缩容:一键增减 Pod 数量;3. 版本更新:滚动更新 Pod(不中断服务)。
服务(Service) 房子的固定门牌号 为 Pod 提供固定网络访问入口的抽象,关联多个 Pod,实现负载均衡。 解决 Pod IP 动态变化的问题 —— 不管 Pod 怎么重建,外部都能通过 Service 的固定地址访问。
配置中心(ConfigMap/Secret) 房子里的 “公共配置”(比如 WiFi 密码) ConfigMap:存储非敏感配置(如数据库地址、端口);Secret:加密存储敏感信息(如密码、Token)。 1. 配置与应用分离,不用改代码就能改配置;2. 敏感信息加密,避免明文泄露。
存储卷(Volume) 房子里的 “储物间” 为 Pod 提供持久化存储的抽象(容器删除后数据会丢,Volume 数据不会丢)。 解决容器 “数据临时存储” 的问题 —— 比如数据库 Pod 的数据、应用日志,需要持久化到 Volume。
核心组件(API Server) 小区物业中心 K8s 的 “统一入口”,所有操作(创建 Pod、扩容)都通过它执行,相当于 “大脑”。 接收并处理用户命令,协调其他组件工作,是 K8s 的核心枢纽。
一、基础查询(最简单,必学) kubectl cluster-info 查看集群核心组件状态 查小区物业中心、导航系统是否正常运行 kubectl cluster-info
kubectl get nodes(简称:kubectl get no) 查看集群节点状态 查小区里有几栋楼、每栋楼是否可用 kubectl get nodes;kubectl get nodes -o wide(看楼的详细信息)
kubectl get namespaces(简称:kubectl get ns) 查看所有命名空间 查小区里有哪些单元楼(default、kube-system 等) kubectl get ns
kubectl get pods(简称:kubectl get po) 查看当前命名空间 Pod 列表 查默认单元楼里有哪些房子、是否入住成功 kubectl get po;kubectl get po -A(查所有单元楼的房子)
kubectl get deployments(简称:kubectl get deploy) 查看当前命名空间 Deployment 列表 查默认单元楼里有哪些管家、管着多少房子 kubectl get deploy;kubectl get deploy -n dev(查 dev 单元楼的管家)
kubectl get services(简称:kubectl get svc) 查看当前命名空间 Service 列表 查默认单元楼里的房子有哪些固定门牌号 kubectl get svc;kubectl get svc -n dev(查 dev 单元楼的门牌号)
kubectl describe <资源类型> < 资源名 > 查看资源详细信息(排错基础) 房子 / 管家 / 门牌号出问题?查详细档案(比如房子没建好的原因) kubectl describe pod nginx-test;kubectl describe deploy nginx-dev
二、核心资源操作(常用,基础进阶) kubectl create namespace <名称>(简称:kubectl create ns < 名称 >) 创建命名空间 新建一个单元楼(比如 dev 单元,专门放开发用的房子) kubectl create ns dev
kubectl run <pod 名> --image=< 镜像 > 快速创建 Pod(测试用) 在默认单元楼里建一套临时房子(测试 Nginx) kubectl run nginx-test --image=nginx:latest
kubectl create deployment <部署名> --image=< 镜像 > 创建 Deployment(管理 Pod) 给默认单元楼配一个管家,让管家管 Nginx 房子 kubectl create deployment nginx-dev --image=nginx:1.25.0 -n dev
kubectl scale deployment <部署名> --replicas=< 数量 > 扩缩容 Pod 数量 让管家多管 / 少管几套房(比如从 2 套扩到 3 套) kubectl scale deployment nginx-dev --replicas=3 -n dev
kubectl expose <资源类型> < 资源名 > --type=NodePort --port=< 端口 > --target-port=< 容器端口 > 创建 Service(暴露服务) 给管家管的房子装固定门牌号(外部能访问) kubectl expose deployment nginx-dev --type=NodePort --port=80 --target-port=80 -n dev
kubectl exec -it <pod 名> – < 命令 > 进入 Pod 交互式终端 进房子里串门(查看 Nginx 配置) kubectl exec -it nginx-test -- /bin/bash
kubectl delete <资源类型> < 资源名 > 删除指定资源 拆房子 / 辞退管家 / 删门牌号 kubectl delete pod nginx-test;kubectl delete deploy nginx-dev -n dev
三、调试排错(中等常用,问题解决) kubectl logs <pod 名> 查看 Pod 日志 看房子里的日记(比如 Nginx 报错记录) kubectl logs nginx-test;kubectl logs -f nginx-test(实时看日记)
kubectl get events 查看集群事件 查小区最近的异常记录(比如哪栋楼资源不够、哪套房镜像拉取失败) kubectl get events;kubectl get events -n dev(查 dev 单元楼的事件)
kubectl cp <本地路径> <pod 名 >:<pod 路径 > 本地与 Pod 互传文件 给房子里送配置文件(比如把本地 nginx.conf 传到 Pod 里) kubectl cp ./nginx.conf nginx-test:/etc/nginx/
四、进阶运维(低频,进阶学习) kubectl set image deployment/<部署名> < 容器名 >=< 新镜像 > 更新 Pod 镜像(版本升级) 让管家把房子里的 Nginx 换成新版本(比如 1.26.0) kubectl set image deployment/nginx-dev nginx=nginx:1.26.0 -n dev
kubectl rollout history deployment/<部署名> 查看 Deployment 更新历史 查管家的工作记录(之前换过哪些版本) kubectl rollout history deployment/nginx-dev -n dev
kubectl rollout undo deployment/<部署名> 回滚 Deployment 版本 新版本出问题,让管家换回之前的版本 kubectl rollout undo deployment/nginx-dev -n dev
kubectl apply -f <yaml 文件> 通过 YAML 文件创建 / 更新资源 用 “图纸” 批量建单元楼 + 管家 + 房子(生产环境标准用法) kubectl apply -f nginx-deploy.yaml
kubectl delete -f <yaml 文件> 通过 YAML 文件删除资源 用 “图纸” 批量删除资源 kubectl delete -f nginx-deploy.yaml
五、高级操作(较少用,深入学习) kubectl label <资源类型> < 资源名 > < 标签名 >=< 标签值 > 给资源打标签 给房子贴标签(比如 “用途 = 测试”),方便筛选管理 kubectl label pod nginx-test env=test
kubectl get pods -l <标签名>=< 标签值 > 按标签筛选资源 只看贴了 “env=test” 标签的房子 kubectl get pods -l env=test
kubectl top nodes/pods 查看节点 / Pod 资源使用率 查哪栋楼 / 哪套房的 CPU / 内存不够用 kubectl top nodes;kubectl top pods -n dev
kubectl cordon <节点名> 标记节点不可调度 给某栋楼贴 “装修中”,不让新房子建在这里 kubectl cordon node-1
kubectl drain <节点名> 驱逐节点上的 Pod(节点维护用) 让某栋楼里的所有房子搬到其他楼(准备修楼) kubectl drain node-1 --ignore-daemonsets
k8s
/archives/021-k8s
作者
Administrator
发布于
2025-12-04
许可协议
CC BY-NC-SA 4.0

评论