Kubernetes教程FG055-Kubernetes命名空间(Namespace)管理实战
内容简介
本篇文章主要介绍Kubernetes中命名空间(Namespace)的管理操作,包括命名空间的创建、删除、配置和使用。风哥教程参考Kubernetes官方文档命名空间管理相关内容,结合生产环境实际操作场景,详细讲解命名空间的管理方法、最佳实践和常见问题解决方案。
目录大纲
Part01-基础概念与理论知识
1.1 命名空间概述
命名空间是Kubernetes中用于隔离资源的逻辑分区,它允许在同一集群中创建多个虚拟集群。命名空间的主要作用包括,风哥提示:。
- 资源隔离:不同命名空间中的资源名称可以重复
- 权限控制:可以为不同命名空间设置不同的访问权限
- 资源配额:可以为不同命名空间设置不同的资源限制
1.2 命名空间的使用场景
命名空间适用于以下场景:
- 多租户环境:不同团队或用户使用不同的命名空间
- 环境隔离:开发、测试、生产环境使用不同的命名空间
- 项目隔离:不同项目使用不同的命名空间
- 资源管理:为不同的工作负载设置不同的资源配额
Part02-生产环境规划与建议
2.1 命名空间的规划原则
- 根据团队结构规划:为每个团队创建独立的命名空间
- 根据环境类型规划:为开发、测试、生产环境创建独立的命名空间
- 根据项目需求规划:为每个项目创建独立的命名空间
- 根据资源需求规划:为不同资源需求的工作负载创建独立的命名空间
2.2 命名空间的命名规范
- 使用小写字母:命名空间名称只能包含小写字母、数字和连字符
- 使用有意义的名称:名称应该能够反映命名空间的用途
- 使用统一的命名前缀:例如团队名称或环境类型
- 避免使用保留名称:如default、kube-system、kube-public等
Part03-生产环境项目实施方案
3.1 命名空间的创建与删除
命名空间的创建与删除操作。
创建命名空间
# 使用kubectl命令创建命名空间
[root@fgedu-master ~]# kubectl create namespace fgedu-dev
[root@fgedu-master ~]# kubectl create namespace fgedu-dev
namespace/fgedu-dev created
通过YAML文件创建命名空间
# 创建命名空间YAML文件
[root@fgedu-master ~]# cat > namespace-fgedu-prod.yaml << EOF apiVersion: v1 kind: Namespace,学习交流加群风哥微信: itpux-com。 metadata:name: fgedu-prod labels: environment: production team: fgedu EOF
[root@fgedu-master ~]# cat > namespace-fgedu-prod.yaml << EOF apiVersion: v1 kind: Namespace,学习交流加群风哥微信: itpux-com。 metadata:name: fgedu-prod labels: environment: production team: fgedu EOF
# 应用YAML文件
[root@fgedu-master ~]# kubectl apply -f namespace-fgedu-prod.yaml
[root@fgedu-master ~]# kubectl apply -f namespace-fgedu-prod.yaml
namespace/fgedu-prod created
查看命名空间
# 查看所有命名空间
[root@fgedu-master ~]# kubectl get namespaces
[root@fgedu-master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 10d
fgedu-dev Active 2m
fgedu-prod Active 1m
kube-node-lease Active 10d
kube-public Active 10d
kube-system Active 10d
default Active 10d
fgedu-dev Active 2m
fgedu-prod Active 1m
kube-node-lease Active 10d
kube-public Active 10d
kube-system Active 10d
删除命名空间
# 删除命名空间
[root@fgedu-master ~]# kubectl delete namespace fgedu-dev
[root@fgedu-master ~]# kubectl delete namespace fgedu-dev
namespace “fgedu-dev” deleted
3.2 命名空间的资源配额配置
为命名空间配置资源配额,限制资源使用。
创建资源配额
# 创建资源配额YAML文件
[root@fgedu-master ~]# cat > resource-quota-fgedu-prod.yaml << EOF apiVersion: v1 kind: ResourceQuota metadata: name: fgedu-prod-quota namespace: fgedu-prod spec: hard: requests.cpu: "4" requests.memory: "8Gi" limits.cpu: "8"limits.memory: "16Gi",学习交流加群风哥QQ113257174。 pods: "20" services: "10" secrets: "100" EOF
[root@fgedu-master ~]# cat > resource-quota-fgedu-prod.yaml << EOF apiVersion: v1 kind: ResourceQuota metadata: name: fgedu-prod-quota namespace: fgedu-prod spec: hard: requests.cpu: "4" requests.memory: "8Gi" limits.cpu: "8"limits.memory: "16Gi",学习交流加群风哥QQ113257174。 pods: "20" services: "10" secrets: "100" EOF
# 应用资源配额
[root@fgedu-master ~]# kubectl apply -f resource-quota-fgedu-prod.yaml
[root@fgedu-master ~]# kubectl apply -f resource-quota-fgedu-prod.yaml
resourcequota/fgedu-prod-quota created
查看资源配额
# 查看命名空间的资源配额
[root@fgedu-master ~]# kubectl get resourcequota -n fgedu-prod
[root@fgedu-master ~]# kubectl get resourcequota -n fgedu-prod
NAME AGE REQUEST LIMIT
fgedu-prod-quota 1m requests.cpu: 0/4, requests.memory: 0/8Gi limits.cpu: 0/8, limits.memory: 0/16Gi
fgedu-prod-quota 1m requests.cpu: 0/4, requests.memory: 0/8Gi limits.cpu: 0/8, limits.memory: 0/16Gi
3.3 命名空间的访问控制配置
为命名空间配置RBAC权限控制。
创建服务账户
# 创建服务账户
[root@fgedu-master ~]# kubectl create serviceaccount fgedu-user -n fgedu-prod
[root@fgedu-master ~]# kubectl create serviceaccount fgedu-user -n fgedu-prod
serviceaccount/fgedu-user created
创建角色
# 创建角色YAML文件
[root@fgedu-master ~]# cat > role-fgedu-prod.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: fgedu-prod-role namespace: fgedu-prod rules: - apiGroups: ["*"] resources: ["pods", "services", "deployments", "configmaps", "secrets"] verbs: ["get", "list", "create", "update", "delete"] EOF
[root@fgedu-master ~]# cat > role-fgedu-prod.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: fgedu-prod-role namespace: fgedu-prod rules: - apiGroups: ["*"] resources: ["pods", "services", "deployments", "configmaps", "secrets"] verbs: ["get", "list", "create", "update", "delete"] EOF
# 应用角色
[root@fgedu-master ~]# kubectl apply -f role-fgedu-prod.yaml
[root@fgedu-master ~]# kubectl apply -f role-fgedu-prod.yaml
,更多视频教程www.fgedu.net.cn。
role.rbac.authorization.k8s.io/fgedu-prod-role created
role.rbac.authorization.k8s.io/fgedu-prod-role created
创建角色绑定
# 创建角色绑定YAML文件
[root@fgedu-master ~]# cat > rolebinding-fgedu-prod.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: fgedu-prod-rolebinding namespace: fgedu-prod subjects: - kind: ServiceAccount name: fgedu-user namespace: fgedu-prod roleRef: kind: Role name: fgedu-prod-role apiGroup: rbac.authorization.k8s.io EOF
[root@fgedu-master ~]# cat > rolebinding-fgedu-prod.yaml << EOF apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: fgedu-prod-rolebinding namespace: fgedu-prod subjects: - kind: ServiceAccount name: fgedu-user namespace: fgedu-prod roleRef: kind: Role name: fgedu-prod-role apiGroup: rbac.authorization.k8s.io EOF
# 应用角色绑定
[root@fgedu-master ~]# kubectl apply -f rolebinding-fgedu-prod.yaml
[root@fgedu-master ~]# kubectl apply -f rolebinding-fgedu-prod.yaml
rolebinding.rbac.authorization.k8s.io/fgedu-prod-rolebinding created
Part04-生产案例与实战讲解
4.1 多租户环境的命名空间规划
某企业有多个开发团队,需要在同一Kubernetes集群中隔离不同团队的资源。
案例背景
- 团队数量:3个开发团队
- 环境类型:每个团队需要开发、测试、生产三个环境
- 资源需求:每个团队的生产环境需要更多资源
- 权限需求:每个团队只能访问自己的命名空间
命名空间规划
命名空间名称 用途 资源配额
team-a-dev A团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-a-test A团队测试环境 requests.cpu: 4, requests.memory: 8Gi
team-a-prod A团队生产环境 requests.cpu: 8, requests.memory: 16Gi
team-b-dev B团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-b-test B团队测试环境 requests.cpu: 4, requests.memory: 8Gi
team-b-prod B团队生产环境 requests.cpu: 8, requests.memory: 16Gi
team-c-dev C团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-c-test C团队测试环境 requests.cpu: 4, requests.memory: 8Gi,更多学习教程公众号风哥教程itpux_com。
team-c-prod C团队生产环境 requests.cpu: 8, requests.memory: 16Gi
team-a-dev A团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-a-test A团队测试环境 requests.cpu: 4, requests.memory: 8Gi
team-a-prod A团队生产环境 requests.cpu: 8, requests.memory: 16Gi
team-b-dev B团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-b-test B团队测试环境 requests.cpu: 4, requests.memory: 8Gi
team-b-prod B团队生产环境 requests.cpu: 8, requests.memory: 16Gi
team-c-dev C团队开发环境 requests.cpu: 2, requests.memory: 4Gi
team-c-test C团队测试环境 requests.cpu: 4, requests.memory: 8Gi,更多学习教程公众号风哥教程itpux_com。
team-c-prod C团队生产环境 requests.cpu: 8, requests.memory: 16Gi
实施步骤
- 创建命名空间:为每个团队的每个环境创建命名空间
- 配置资源配额:为每个命名空间设置适当的资源配额
- 配置RBAC权限:为每个团队创建服务账户和角色绑定
- 部署应用:在相应的命名空间中部署应用
4.2 环境隔离的命名空间配置
某企业需要在同一Kubernetes集群中隔离开发、测试和生产环境。。
案例背景
- 环境类型:开发、测试、生产
- 应用数量:10个微服务应用
- 数据敏感性:生产环境数据敏感,需要严格隔离
- 资源需求:生产环境需要更多资源
命名空间配置
# 创建开发环境命名空间
[root@fgedu-master ~]# kubectl create namespace dev
[root@fgedu-master ~]# kubectl create namespace dev
# 创建测试环境命名空间
[root@fgedu-master ~]# kubectl create namespace test
# 创建生产环境命名空间
[root@fgedu-master ~]# kubectl create namespace prod
资源配额配置
# 为生产环境配置资源配额
[root@fgedu-master ~]# cat > resource-quota-prod.yaml << EOF apiVersion: v1 kind: ResourceQuota metadata: name: prod-quota namespace: prod spec: hard: requests.cpu: "16" requests.memory: "32Gi" limits.cpu: "32" limits.memory: "64Gi" pods: "50" EOF # 应用资源配额 [root@fgedu-master ~]# kubectl apply -f resource-quota-prod.yaml
[root@fgedu-master ~]# cat > resource-quota-prod.yaml << EOF apiVersion: v1 kind: ResourceQuota metadata: name: prod-quota namespace: prod spec: hard: requests.cpu: "16" requests.memory: "32Gi" limits.cpu: "32" limits.memory: "64Gi" pods: "50" EOF # 应用资源配额 [root@fgedu-master ~]# kubectl apply -f resource-quota-prod.yaml
网络策略配置
# 为生产环境配置网络策略,限制外部访问
[root@fgedu-master ~]# cat > network-policy-prod.yaml << EOF。from K8S+DB视频:www.itpux.com。 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: prod-network-policy namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: {} egress: - to: - podSelector: {} EOF # 应用网络策略 [root@fgedu-master ~]# kubectl apply -f network-policy-prod.yaml
[root@fgedu-master ~]# cat > network-policy-prod.yaml << EOF。from K8S+DB视频:www.itpux.com。 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: prod-network-policy namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: {} egress: - to: - podSelector: {} EOF # 应用网络策略 [root@fgedu-master ~]# kubectl apply -f network-policy-prod.yaml
Part05-风哥经验总结与分享
5.1 命名空间管理的最佳实践
- 合理规划命名空间:根据团队、项目或环境类型规划命名空间
- 使用统一的命名规范:制定并遵循命名空间的命名规范
- 配置适当的资源配额:为每个命名空间设置合理的资源限制
- 实施RBAC权限控制:为不同命名空间设置不同的访问权限
- 使用网络策略加强隔离:在需要的命名空间中配置网络策略
- 定期清理无用命名空间:及时删除不再使用的命名空间,释放资源
5.2 常见问题与解决方案
问题 原因 解决方案
命名空间创建失败 权限不足或名称无效 检查用户权限,确保名称符合规范
资源创建失败 超出命名空间资源配额 调整资源配额或减少资源请求
Pod调度失败 命名空间资源不足 增加命名空间资源配额或清理无用资源
权限访问错误 RBAC配置不正确 检查角色和角色绑定配置
网络通信问题 网络策略限制 检查网络策略配置,确保必要的通信
命名空间创建失败 权限不足或名称无效 检查用户权限,确保名称符合规范
资源创建失败 超出命名空间资源配额 调整资源配额或减少资源请求
Pod调度失败 命名空间资源不足 增加命名空间资源配额或清理无用资源
权限访问错误 RBAC配置不正确 检查角色和角色绑定配置
网络通信问题 网络策略限制 检查网络策略配置,确保必要的通信
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
