K8S 完整核心笔记
一、K8S 高频核心命令(最全总结 + 区别)
1. 资源查看命令
bash
运行
# 通用查看语法:查看指定名称空间的指定资源 kubectl get 资源类型 -n 命名空间名称 # 案例:查看test1命名空间下的所有Pod kubectl get pod -n test1 # 查看资源详细信息(事件、原因、参数、报错)排错必备 kubectl describe 资源类型 资源名 -n 命名空间 # 案例:查看my-nginx这个pod详细信息 kubectl describe pod my-nginx -n test12. 资源删除命令
bash
运行
# 精准删除单个资源 kubectl delete 资源类型 资源名 -n 命名空间 # 案例:删除my-nginx的pod kubectl delete pod my-nginx -n test1 # 通过yaml清单删除资源(删除当前文件定义的所有资源) kubectl delete -f 资源清单.yaml3. 资源创建 / 更新命令(重点区别)
bash
运行
# create:仅创建资源,资源已存在直接报错,不能更新 kubectl create -f xx.yaml # apply:万能命令,无资源则创建,有资源则更新,不会报错 kubectl apply -f xx.yaml核心区别: create = 只新增,不更新(重复执行报错) apply = 存在更新、不存在创建(生产 99% 用 apply)
4. 快速生成 yaml 模板(企业常用)
bash
运行
# 不真实创建资源,仅输出标准yaml清单模板 kubectl create ns test1 --dry-run=client -o yaml作用:快速生成干净模板,不用手写骨架,提高开发效率
二、K8S 标签管理命令(label)
1. 查看资源标签
bash
运行
# 查看资源自带所有标签 kubectl get 资源类型 --show-labels # 案例:查看所有pod的标签 kubectl get pod --show-labels2. 根据标签筛选资源
bash
运行
# 只查询匹配指定标签的资源 kubectl get 资源类型 -l 标签key=标签value # 案例:只查app=nginx的pod kubectl get pod -l app=nginx3. 给资源打标签
bash
运行
kubectl label 资源类型 资源名 key=value # 案例:给my-nginx的pod打上app=web标签 kubectl label pod my-nginx app=web三、K8S 资源清单 YAML 完整骨架(核心五大字段)
所有 K8S 资源(pod/deployment/svc/secret)全部通用这套骨架
yaml
# 1.apiVersion:资源API版本,不同资源版本不同 apiVersion: v1 # 2.kind:资源类型(Pod/Service/Deployment/Secret等) kind: Pod # 3.metadata:资源元数据(名称、命名空间、标签、注释) metadata: name: my-nginx # Pod名称,当前命名空间唯一 # 4.spec:【期望状态】你告诉K8S你想要什么样的资源 spec: containers: # 定义容器列表(数组,可以多个容器) - name: my-nginx # 容器名称 image: nginx # 容器镜像 # 5.status:【真实状态】K8S自动生成,用户无需手写 # 记录当前Pod真实运行状态、端口、IP、就绪状态最简可直接运行的 Pod 完整案例(带全注释)
yaml
# 指定API版本,固定v1 apiVersion: v1 # 资源类型为Pod kind: Pod metadata: # 自定义pod名称 name: my-nginx-pod spec: # pod内容器列表,可以写多个容器 containers: # 第一个容器 - name: nginx-container # 使用nginx官方镜像 image: nginx:latest四、K8S YAML 五种数据类型(必考 + 案例)
1. string 字符串类型
文本内容,不需要引号也默认字符串
yaml
metadata: name: web-demo # string字符串类型2. int 数值类型
数字,纯数字
yaml
spec: replicas: 3 # int数值:副本数量3个3. boolean 布尔类型
只有 true /false
yaml
spec: automountServiceAccountToken: false4. Object 对象类型(键值嵌套)
大括号嵌套、层级结构,键值对结构
yaml
metadata: labels: # 对象 app: web # 对象内键值 env: test5. 数组 / 列表类型(并列多个对象)
带-就是数组,同一类资源多个并列
yaml
spec: containers: - name: nginx # 数组第1个容器 image: nginx - name: mysql # 数组第2个容器 image: mysql:5.7五、Pod 三大探针(核心重点:保证 Pod 稳定运行)
探针作用:检测容器健康状态,自动容错、自动重启、自动屏蔽故障 Pod
1. 存活探针 livenessProbe
- 作用:检测容器是否活着、是否崩溃卡死
- 机制:Pod 运行期间持续循环检测
- 异常动作:检测失败 →直接重启 Pod
- 用途:解决容器卡死、进程挂掉但 Pod 不重启问题
2. 就绪探针 readinessProbe
- 作用:检测容器是否就绪、能否对外提供服务
- 机制:Pod 运行期间持续循环检测
- 异常动作:检测失败 →不会重启 Pod,会被 Service 剔除,不接收流量
- 用途:避免把用户流量转发到未启动好、故障的 Pod
3. 启动探针 startupProbe
- 作用:专门检测容器是否启动完成
- 机制:仅启动阶段检测,启动成功后永久不再检测
- 用途:适配启动慢的服务(java、微服务),防止启动阶段被存活探针误杀重启
六、探针三种检测方式(实操方式)
1. exec 命令检测
在容器内部执行一条命令,命令返回 0 正常,非 0 失败案例:检测 nginx 页面目录是否存在
yaml
livenessProbe: exec: command: ["test","-d","/usr/share/nginx/html"]2. tcpSocket 端口检测
检测容器指定端口是否监听,端口通则正常 适合:mysql、redis、nginx 端口类服务检测
yaml
livenessProbe: tcpSocket: port: 803. httpGet 请求检测
向容器发送 http 请求,状态码 2xx/3xx 正常,4xx/5xx 失败 适合:web 项目、接口服务
yaml
livenessProbe: httpGet: path: / port: 80七、Secret 三种类型(K8S 机密资源)
Secret 用于存放密码、密钥、证书、镜像账号,加密存储
1. 账号密码类型
存储普通用户名、密码(数据库密码、系统账号密码)
2. 镜像仓库类型
存储镜像仓库账号密码,用于私有镜像拉取
3. TLS 证书类型
存储 https 证书、密钥,用于 Ingress HTTPS 域名加密访问
补充:create 与 apply 终极总结
kubectl create -f yaml- 只能新建
- 资源已存在 →报错
kubectl apply -f yaml- 无资源:创建
- 有资源:更新
- 生产环境唯一推荐使用
