Kubernetes Namespace
Namespace 的用途
- 实现资源隔离 - 用以实现不同租户/团队的资源分隔
- 多环境部署 - 设定 Dev,Test 等 Namespace,将不同部署环境进行分隔
- 微服务部署 - 将应用拆分为多个独立模块,通过独立的 Namespace 进行分隔
- 安全和合规性
Namespace 的实现原理
- 每个 Namespace 都是 Kubernetes 下的一个虚拟集群,其内部包含的资源(Pod,Service,Volume 等)只能在该 Namespace 下使用
- Kubernetes API server 使用 etcd 存储资源对象的元数据,每一个 Namespace 拥有一个独立的 etcd 存储空间
- 在 Kubernetes 运行时,每个 Namespace 下的资源都被分配一个唯一标识符,并与该 Namespace 的标识符相关联,因此不同 Namespace 下的同名资源对象不冲突
- Kubernetes Scheduler 根据不同的 Namespace 将 Pod 调度到节点
- Kubernetes DNS 插件为每个 Namespace 创建一个 DNS 域名,用于解析该 Namespace 下的所有 Service 域名
基础使用
- 查看全部 Namespace
kubectl get ns
- 创建与删除 Namespace
# 创建
kubectl create ns test_ns
# 删除
kubectl delete ns test_ns
- 使用 Yaml 文件创建 Namespace
# 快速创建模板:kubectl create ns test --dry-run -o yaml > test_ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test_ns
- 切换命名空间
kubectl config set-context --current --namespace=kube-system
- 查看哪些资源是命名空间级别的
kubectl api-resources --namespaced=true
Namespace 资源配额
常见的资源配额
- CPU 配额 - 限制一个 Namespace 下所有 Pod 使用的 CPU 额度
- 内存配额 - 限制一个 Namespace 下所有 Pod 使用的内存额度
- 存储配额 - 限制一个 Namespace 下所有 PVC 使用的存储额度
- Pod 配额 - 限制 Namespace 下可运行的 Pod 的最大数量
- 服务配额 - 限制 Namespace 下可运行的 service 的最大数量
启动资源配额
- 检查集群是否启用了资源配额
cat /etc/kubernetes/manifest/kube-apuserver.yaml | grep enable-admission-plugins
- 如果没有,为其增加 ResourceQuota
- --enable-admission-plugins=NodeRestriction, ResourceQuota
配额机制支持的资源类型
https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/
声明资源限额
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-quota
namespace: test-quota
spec:
hard:
pods: "5"
services: "3"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "1"
limits.memory: 1Gi
Kubernets Label
基础使用
- 创建标签
kubectl label 资源类型 名称 <label-key1>=<label-value1> <label-key2>=<label-value2>
或者在创建资源时使用 —labels 参数直接定义
kubectl run web-nginx --image=nginx:latest --labels=version=test
- 删除标签
kubectl label 资源类型 名称 <label-key>-
- 查看标签
kubectl get 资源类型 名称 --show-labels
根据标签过滤资源
- 指定 Key=value
kubectl get pods -l env=test
- 根据 key 名称显示资源
kubectl get pods -L env
- 根据标签删除资源
kubectl delete pods -l env=xxx
讨论
文章中的问题、补充与不同观点,欢迎在这里交流。