HNC 核心功能解析:从命名空间继承到资源配额的终极实践 HNC 核心功能解析从命名空间继承到资源配额的终极实践【免费下载链接】hierarchical-namespacesHome of the Hierarchical Namespace Controller (HNC). Adds hierarchical policies and delegated creation to Kubernetes namespaces for improved in-cluster multitenancy.项目地址: https://gitcode.com/gh_mirrors/hi/hierarchical-namespacesHierarchical Namespace Controller (HNC) 是一款强大的 Kubernetes 工具它通过添加命名空间层次结构和委托创建功能显著提升了集群内的多租户管理能力。本文将深入解析 HNC 的核心功能从命名空间继承到资源配额管理帮助您全面掌握这一工具的使用方法和最佳实践。命名空间层次结构构建有序的集群环境 HNC 的核心功能之一是允许您将 Kubernetes 命名空间组织成层次结构。这种结构使得策略和资源能够从父命名空间自动继承到子命名空间极大地简化了多团队协作和资源管理。父-child 关系简化资源共享在 HNC 中每个命名空间可以有零个或一个父命名空间形成一个树状结构。这种结构允许子命名空间继承父命名空间的策略和资源。例如如果将team-a设置为acme-org的子命名空间那么team-a将自动继承acme-org中的角色和角色绑定。创建父子关系非常简单只需使用kubectl-hns插件kubectl hns set team-a --parent acme-org这个命令会创建一个HierarchyConfiguration对象告诉 HNC 如何管理这个命名空间的层次关系。您可以通过以下命令查看命名空间的层次结构kubectl hns tree acme-org子命名空间细粒度的权限控制HNC 引入了子命名空间subnamespace的概念这是一种特殊类型的命名空间其生命周期与父命名空间紧密相连。子命名空间由 HNC 通过SubnamespaceAnchor资源创建和管理这使得没有集群管理员权限的用户也能创建受限的子命名空间。创建子命名空间的命令如下kubectl hns create service-1 -n team-a这条命令会在team-a命名空间中创建一个名为service-1的子命名空间锚点HNC 随后会自动创建对应的子命名空间。子命名空间在层次结构中显示时会带有[s]标记acme-org └── team-a [s] └── service-1 [s]子命名空间与普通命名空间称为完整命名空间的主要区别在于子命名空间的父级关系由 HNC 控制不能手动修改删除父命名空间时子命名空间也会被自动删除子命名空间的创建权限可以通过 RBAC 细粒度控制资源传播自动化的策略分发 HNC 不仅提供了命名空间的层次结构还能自动将资源从父命名空间传播到子命名空间。这一功能极大地减少了重复配置的工作量确保了策略的一致性。默认传播RBAC 资源的自动继承默认情况下HNC 会自动传播 RBAC 角色Role和角色绑定RoleBinding。这意味着在父命名空间中定义的访问控制策略会自动应用到所有子命名空间中。例如在acme-org中创建一个允许查看 Pod 的角色apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader rules: - apiGroups: [] resources: [pods] verbs: [get, list]以及相应的角色绑定apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods subjects: - kind: User name: aliceexample.com roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.ioHNC 会自动将这些资源传播到acme-org的所有子命名空间如team-a和service-1确保 Alice 在这些命名空间中也能查看 Pod。自定义传播灵活配置资源分发除了默认的 RBAC 资源HNC 还允许管理员配置其他类型资源的传播。这通过修改集群范围的HNCConfiguration对象实现apiVersion: hnc.x-k8s.io/v1alpha2 kind: HNCConfiguration metadata: name: config spec: resources: - group: resource: secrets mode: Propagate - group: resource: configmaps mode: Propagate这个配置告诉 HNC 传播所有命名空间中的 Secrets 和 ConfigMaps。修改配置后HNC 会自动开始传播这些资源。传播例外精细控制资源流向有时您可能不希望某些资源被传播到所有子命名空间。HNC 提供了多种注解annotations来控制资源的传播行为propagate.hnc.x-k8s.io/treeSelect: 只传播到指定的子命名空间kubectl annotate secret my-secret -n acme-org propagate.hnc.x-k8s.io/treeSelectteam-apropagate.hnc.x-k8s.io/select: 使用树标签选择要传播的命名空间kubectl annotate secret my-secret -n acme-org propagate.hnc.x-k8s.io/selectteam-a.tree.hnc.x-k8s.io/depthpropagate.hnc.x-k8s.io/none: 不传播到任何子命名空间kubectl annotate secret my-secret -n acme-org propagate.hnc.x-k8s.io/nonetruepropagate.hnc.x-k8s.io/all: 传播到所有子命名空间默认行为kubectl annotate secret my-secret -n acme-org propagate.hnc.x-k8s.io/alltrue这些注解提供了灵活的方式来控制资源的传播范围满足不同场景的需求。层次化资源配额高效管理集群资源 HNC 引入了HierarchicalResourceQuota(HRQ)这是一种特殊的资源配额允许在命名空间层次结构中共享资源。HRQ 确保父命名空间及其所有子命名空间的资源使用总和不超过设定的限制。创建层次化资源配额创建 HRQ 与创建普通的资源配额类似但具有层次化的效果。例如在acme-org命名空间中创建一个 HRQapiVersion: hnc.x-k8s.io/v1alpha2 kind: HierarchicalResourceQuota metadata: name: acme-org-quota spec: hard: requests.cpu: 10 requests.memory: 10Gi limits.cpu: 20 limits.memory: 20GiHNC 会在acme-org及其所有子命名空间中创建相应的ResourceQuota对象命名为hrq.hnc.x-k8s.io确保资源使用总和不超过 HRQ 中定义的限制。子配额灵活分配资源HRQ 还支持在子命名空间中创建子配额允许进一步细分资源。例如在team-a中创建一个子配额apiVersion: hnc.x-k8s.io/v1alpha2 kind: HierarchicalResourceQuota metadata: name: team-a-quota spec: hard: requests.cpu: 5 requests.memory: 5Gi limits.cpu: 10 limits.memory: 10Gi这个子配额会从acme-org的总配额中分配一部分资源给team-a及其子命名空间实现资源的精细化管理。实用工具kubectl-hns 插件 ️HNC 提供了一个方便的kubectl插件kubectl-hns简化了 HNC 相关资源的管理。以下是一些常用命令查看命名空间层次结构kubectl hns tree namespace创建子命名空间kubectl hns create subnamespace-name -n parent-namespace删除子命名空间kubectl hns delete subnamespace-name -n parent-namespace设置命名空间的父级kubectl hns set namespace --parent parent-namespace查看 HNC 配置kubectl hns config describe修改资源传播配置kubectl hns config set-resource resource --group group --mode mode最佳实践与注意事项 ⚠️保持 HNC 健康运行监控 HNC 控制器的状态确保其正常运行定期检查 HNC 的日志和指标及时发现问题为 HNC 控制器设置适当的资源限制推荐至少 150Mi 内存命名空间管理建议对需要严格控制的环境使用子命名空间而非完整命名空间避免过深的命名空间层次结构建议不超过 3-4 层删除包含子命名空间的命名空间时使用--allowCascadingDeletion标志资源传播最佳实践谨慎选择要传播的资源类型避免传播过多资源影响性能使用传播例外注解精细控制资源流向定期审查传播的资源确保没有不必要的资源被传播资源配额管理为重要的父命名空间设置 HRQ确保资源合理分配监控资源使用情况及时调整配额设置避免在同一层次结构中设置过多重叠的 HRQ总结HNC 通过引入命名空间层次结构、资源传播和层次化资源配额为 Kubernetes 集群提供了强大的多租户管理能力。它简化了资源和策略的管理提高了团队协作效率同时保持了必要的隔离性和安全性。无论是小型团队还是大型企业HNC 都能帮助您更好地组织和管理 Kubernetes 资源实现更高效、更安全的集群运维。通过本文介绍的核心功能和最佳实践您可以开始在自己的集群中充分利用 HNC 的强大功能。要开始使用 HNC请访问项目仓库获取安装指南和更多文档git clone https://gitcode.com/gh_mirrors/hi/hierarchical-namespaces祝您在 Kubernetes 多租户管理的旅程中取得成功【免费下载链接】hierarchical-namespacesHome of the Hierarchical Namespace Controller (HNC). Adds hierarchical policies and delegated creation to Kubernetes namespaces for improved in-cluster multitenancy.项目地址: https://gitcode.com/gh_mirrors/hi/hierarchical-namespaces创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考