一、问题四:新增节点如何确保可用性?

Day018-K8s污点和容忍:集群资源精细化隔离-新增节点如何确保可用性

确保新增节点可用性

1、组件健康检查

  • 检查新节点的 kubelet 服务运行状态:systemctl status kubelet,确保无报错。
  • 验证容器运行时状态,如 containerd 或 Docker 服务正常。

2、节点维护与调度控制

  • 维护节点时,标记为不可调度:kubectl cordon <节点名>,避免 Pod 调度至该节点。
  • 完成维护后,恢复调度:kubectl uncordon <节点名>

3、资源监控与验证

  • 通过 kubectl describe node <节点名> 查看节点资源(CPU、内存)分配情况,确保资源充足。
  • 部署测试 Pod,验证节点调度能力:kubectl run test-pod --image=nginx --node=<新节点名>,检查 Pod 运行状态。

4、集群网络与通信验证

  • 确保新节点与集群其他节点网络互通,Flannel、Calico 等网络插件在新节点正常运行。
  • 验证 Pod 间、Service 与 Pod 的通信功能,确保网络策略无阻塞。

二、问题五:多租户如何进行隔离?

Day018-K8s污点和容忍:集群资源精细化隔离-多租户如何进行隔离

在 Kubernetes 集群中,通过以下策略实现多租户的资源隔离,确保不同租户的 Pod 运行在指定节点,避免资源争用和安全风险:

1、节点标签与污点隔离

  • 标记节点:为不同租户分配专属节点,添加标签和污点:

```yaml # 租户A的节点 kubectl label node node01 tenant=a kubectl taint node node01 tenant=a:NoSchedule

# 租户B的节点 kubectl label node node02 tenant=b kubectl taint node node02 tenant=b:NoSchedule ```

  • 效果:只有声明对应容忍的 Pod 才能调度到指定节点

2、Pod 配置容忍与节点亲和性

  • 租户A的 Pod 配置

yaml spec: tolerations: - key: "tenant" operator: "Equal" value: "a" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: tenant operator: In values: ["a"]

  • 租户B的 Pod 配置:类似,将 value 改为 b

yaml spec: tolerations: - key: "tenant" operator: "Equal" value: "b" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: tenant operator: In values: ["b"]

3、命名空间(Namespace)隔离

  • 创建租户专属命名空间

yaml kubectl create namespace tenant-a kubectl create namespace tenant-b

  • 资源配额(Resource Quota):限制每个租户的资源使用:

yaml apiVersion: v1 kind: ResourceQuota metadata: name: tenant-a-quota namespace: tenant-a spec: hard: requests.cpu: "10" requests.memory: 20Gi limits.cpu: "20" limits.memory: 40Gi

4、网络策略(Network Policy)

  • 禁止跨租户通信

yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: tenant-isolation namespace: tenant-a spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: {} egress: - to: - podSelector: {}

  • 效果:租户A的 Pod 只能与同一命名空间的 Pod 通信。

5、RBAC 权限控制

  • 限制租户访问范围

yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: tenant-a-admin namespace: tenant-a subjects: - kind: User name: user-a apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: admin apiGroup: rbac.authorization.k8s.io

  • 效果:租户A的用户仅能管理 tenant-a 命名空间内的资源。