集群管理实战
在 Kubernetes 集群管理中,名字空间(Namespace)是用于逻辑划分集群资源的一种重要手段。通过名字空间,可以在同一个物理集群上模拟出多个虚拟集群,便于不同的团队或项目之间共享集群资源的同时,保持资源的隔离和组织结构的清晰。
使用名字空间分隔系统资源
-
创建和列出名字空间
创建一个新的名字空间可通过编写 YAML 文件或直接使用
kubectl
命令行工具创建:# YAML 文件示例 apiVersion: v1 kind: Namespace metadata: name: my-namespace # 使用 kubectl 创建 kubectl create namespace my-namespace
列出所有名字空间:
kubectl get namespaces
-
在名字空间中创建资源
在创建 Deployment、Service、ConfigMap 等资源时,可以通过在 YAML 文件中指定
metadata.namespace
来将资源放入特定的名字空间:apiVersion: apps/v1 kind: Deployment metadata: name: my-app namespace: my-namespace spec: # ...
或者在执行
kubectl
命令时通过-n
参数指定:kubectl run my-app --image=my-app-image -n my-namespace
给名字空间设置资源限额
资源限额允许管理员为每个名字空间设置资源使用的上限,以防止资源滥用或过度分配导致集群资源耗尽。资源限额可以针对 CPU、内存和存储等资源进行限制。
-
设置资源配额
创建资源配额的 YAML 示例:
apiVersion: v1 kind: ResourceQuota metadata: name: quota namespace: my-namespace spec: hard: requests.cpu: "2" requests.memory: "2Gi" limits.cpu: "4" limits.memory: "4Gi" persistentvolumeclaims: "10" services.loadbalancers: "2"
通过
kubectl
创建资源配额:kubectl apply -f resource-quota.yaml -n my-namespace
上述示例为
my-namespace
设置了 CPU 和内存的请求和限制,同时也限制了持久卷声明和负载均衡器服务的数量。
默认资源配额的使用
默认资源配额是指在集群层面或部分名字空间层面预设的一套资源使用限制。系统可能会为 default
或 kube-system
这样的核心名字空间设置默认资源配额,确保基础服务的稳定运行。
若要在集群中对所有新建的名字空间都启用默认资源配额,可以通过创建名为 LimitRange
的资源来实现。不过,通常情况下,默认资源配额不是自动设置的,而是需要管理员主动配置。
举例来说,如果你想要为所有新建 Pod 设置默认的 CPU 和内存请求和限制:
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
spec:
limits:
- type: Container
min:
cpu: "250m"
memory: "128Mi"
max:
cpu: "1"
memory: "512Mi"
default:
cpu: "500m"
memory: "256Mi"
通过以上 YAML 文件创建 LimitRange
,将为该范围内的 Pod 设置默认的资源请求和限制。但请注意,LimitRange 通常应用于特定名字空间,而非全局默认。对于名字空间级别的资源限额,仍需通过 ResourceQuota 来实现。