Kubernetes 命名空间(Namespaces)是一种将集群资源划分为多个独立的部分的机制。它们允许在同一个物理集群中运行多个逻辑上分隔的组。
使用场景
- 环境隔离:例如,将开发、测试和生产环境分隔开。
- 资源管理:通过命名空间对资源(如CPU和内存)进行配额管理。
- 访问控制:为不同的团队或项目设置不同的访问权限。
- 服务组织:逻辑上组织不同的服务和应用。
使用技巧
- 规划命名空间:根据项目和团队的结构合理规划命名空间。
- 资源配额:使用资源配额限制每个命名空间的资源使用。
- 角色基础访问控制(RBAC):结合RBAC实现细粒度的访问控制。
- 命名空间特定的配置:使用ConfigMaps和Secrets为不同的命名空间配置不同的设置。
- 标签和选择器:使用标签和选择器管理跨命名空间的资源。
使用案例
案例 1: 创建和使用命名空间
创建命名空间:
- 使用命令行:
kubectl create namespace dev
- 使用YAML文件:
apiVersion:
v1
kind:
Namespace
metadata:
name:
dev
在命名空间中创建资源:
- 在命名空间
dev
中创建部署:apiVersion:
apps/v1
kind:
Deployment
metadata:
name:
example-deployment
namespace:
dev
spec:
replicas:
2
selector:
matchLabels:
app:
example
template:
metadata:
labels:
app:
example
spec:
containers:
-
name:
example-container
image:
example-image
指定命名空间执行命令:
代码语言:javascript复制kubectl get pods --namespace dev
案例 2: 设置资源配额
创建资源配额:
- 在命名空间
dev
中设置CPU和内存的配额:apiVersion:
v1
kind:
ResourceQuota
metadata:
name:
dev-quota
namespace:
dev
spec:
hard:
requests.cpu:
"1"
requests.memory:
1Gi
limits.cpu:
"2"
limits.memory:
2Gi
应用资源配额:
代码语言:javascript复制kubectl apply -f <quota-file.yaml>
案例 3: 使用命名空间进行访问控制
创建角色和角色绑定:
- 为命名空间
dev
创建一个角色和角色绑定,允许用户执行特定操作:apiVersion:
rbac.authorization.k8s.io/v1
kind:
Role
metadata:
namespace:
dev
name:
dev-role
rules:
-
apiGroups:
[""]
resources:
["pods"]
verbs:
["get",
"watch",
"list"]
---
apiVersion:
rbac.authorization.k8s.io/v1
kind:
RoleBinding
metadata:
name:
dev-role-binding
namespace:
dev
subjects:
-
kind:
User
name:
<username>
apiGroup:
rbac.authorization.k8s.io
roleRef:
kind:
Role
name:
dev-role
apiGroup:
rbac.authorization.k8s.io
应用角色和角色绑定:
代码语言:javascript复制kubectl apply -f <role-and-rolebinding-file.yaml>
这些案例展示了如何使用命名空间进行环境隔离、资源管理和访问控制。在实际应用中,可以根据项目的具体需求和规模,灵活地应用和调整这些策略。