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

确保新增节点可用性
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 的通信功能,确保网络策略无阻塞。
二、问题五:多租户如何进行隔离?¶

在 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命名空间内的资源。