K8s(15)

一、PV 与 PVC(持久化存储)

1️⃣ PV(PersistentVolume)

  • 集群级别的存储资源,由管理员提前创建(或动态供给)

  • 生命周期 独立于 Pod

  • 关键属性:capacityaccessModesstorageClassNamepersistentVolumeReclaimPolicy(Retain/Delete/Recycle)

复制代码

yaml

yaml

复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage
  nfs:
    server: 192.168.1.100
    path: /data/nfs

2️⃣ PVC(PersistentVolumeClaim)

  • 用户对存储的请求(大小 + 访问模式 + StorageClass)

  • K8s 自动绑定满足条件的 PV

复制代码

yaml

yaml

复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-storage

3️⃣ Pod 中使用 PVC

复制代码

yaml

yaml

复制代码
volumes:
  - name: data
    persistentVolumeClaim:
      claimName: pvc-nfs

📌 AccessModes

  • ReadWriteOnce (RWO):单节点读写

  • ReadOnlyMany (ROX):多节点只读

  • ReadWriteMany (RWX):多节点读写(需后端支持,如 NFS / CephFS)

📌 StorageClass + Provisioner:支持动态创建 PV(最常用)


二、探针(Probe)

用于判断容器健康状态,配在 container 下

探针 作用
livenessProbe 存活探针 → 失败则 重启容器
readinessProbe 就绪探针 → 失败则 从 Service Endpoints 摘除(不重启)
startupProbe 启动探针(慢启动应用)→ 在成功前禁用 liveness

探测方式

  • httpGet

  • tcpSocket

  • exec

示例

复制代码

yaml

yaml

复制代码
containers:
- name: app
  image: nginx
  startupProbe:
    httpGet:
      path: /
      port: 80
    failureThreshold: 30
    periodSeconds: 5
  livenessProbe:
    httpGet:
      path: /healthz
      port: 80
    initialDelaySeconds: 10
    periodSeconds: 10
  readinessProbe:
    httpGet:
      path: /ready
      port: 80
    initialDelaySeconds: 5
    periodSeconds: 5

三、Pod镜像拉取和重启策略(restartPolicy)

镜像拉取策略(imagePullPolicy)

这个字段配在 container 级别 ,控制 kubelet 在创建容器时是否去远程仓库拉取镜像

三种取值

策略 行为 典型场景
Always 每次创建容器都去仓库检查并拉取(tag 变了会更新) 生产环境、latest tag、需要保证镜像最新
IfNotPresent 本地有就用本地的,没有才去拉 开发/测试、离线环境、内网部署
Never 只用本地镜像,绝不远程拉取 纯离线环境、镜像已提前 docker load 到节点

只能在 Pod / 单个容器层配置,Deployment 等控制器默认固定为 Always

策略 说明
Always(默认) 容器退出就重启(适用于常驻服务)
OnFailure 非零退出码才重启(适合 Job)
Never 不重启(适合一次性任务)
复制代码

yaml

yaml

复制代码
spec:
  restartPolicy: Always

⚠️ Deployment / StatefulSet **只允许 Always**​

Job / CronJob 通常用 OnFailure/ Never


四、Pod YAML 基本参数结构

复制代码

yaml

yaml

复制代码
apiVersion: v1          # apps/v1(Deployment) / batch/v1(Job)
kind: Pod
metadata:
  name: my-pod
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: app
    image: nginx:1.25
    imagePullPolicy: IfNotPresent   # Always / Never
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "500m"
        memory: "256Mi"
    env:
    - name: ENV_VAR
      value: "prod"
    volumeMounts:
    - name: data
      mountPath: /usr/share/nginx/html
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: pvc-nfs
  restartPolicy: Always
  nodeSelector: {}
  tolerations: []

五、K8s 常用命令(kubectl)

复制代码

bash

bash

复制代码
# 资源查看
kubectl get pods [-n ns] [-o wide]
kubectl describe pod <pod> [-n ns]
kubectl logs <pod> [-c container] [-f]

# 进入容器 / 端口转发
kubectl exec -it <pod> -- sh
kubectl port-forward pod <pod> 8080:80

# 创建 / 删除 / 应用
kubectl apply -f xxx.yaml
kubectl delete -f xxx.yaml
kubectl edit deploy <name>

# 扩缩容 / 重启
kubectl scale deploy <name> --replicas=3
kubectl rollout restart deploy <name>
kubectl rollout status deploy <name>
kubectl rollout undo deploy <name>

# 查看事件 / 拓扑
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get nodes,pv,pvc,svc

六、K8s 高可用(HA)体现

K8s 高可用是 多层 HA 的组合

① 控制平面 HA

  • 多 Master(≥3 奇数节点)

    • kube-apiserver:前置 LB(haproxy / keepalived /云LB)

    • etcd:集群模式(Raft),容忍 (n-1)/2节点故障

    • kube-controller-manager/ kube-schedulerLeader Election,只一节点活跃

  • ⇒ 任意 Master 宕机,集群仍可管理

② 工作负载 HA

  • **多副本(Deployment / StatefulSet)**​ ⇒ Pod 打散在不同 Node

  • podAntiAffinity​ 避免同应用全在同一节点

  • HPA​ 自动扩缩应对负载

③ 节点级 HA

  • DaemonSet + 多 Worker Node

  • 节点故障 ⇒ 该节点 Pod 被驱逐,调度到其他健康节点重新拉起

④ 存储 / 网络 HA

  • PV 后端(Ceph/NFS/云盘)本身具备冗余

  • CNI + kube-proxy 保证 Service 流量自动切换