Kubernetes Namespaces
Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群。
大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。
Namespaces创建删除查看
创建
(1) 命令行直接创建
$ kubectl create namespace new-namespace
(2) 通过文件创建
$ cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: new-namespace
$ kubectl create -f ./my-namespace.yaml
注:命名空间名称满足正则表达式a-z0-9?,最大长度为63位
删除
$ kubectl delete namespaces new-namespace
- 删除一个namespace会自动删除所有属于该namespace的资源。
- default和kube-system命名空间不可删除。
- PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
- Events是否属于namespace取决于产生events的对象。
查看 Namespaces
$ kubectl get namespaces
NAME STATUS AGE
default Active 1d
kube-system Active 1d
配置Pod配额
创建命名空间
$ kubectl create namespace test-pod
创建ResourceTest对象
test-pod.yaml
apiVersion: v1
kind: ResourceTest
metadata:
name: test-pod
spec:
hard:
pods: "2"
在test-pod命名空间中创建ResourceTest对象
$ kubectl create -f test-pod.yaml --namespace=test-pod
查看ResourceQuota对象的详细信息:
$ kubectl get resourcequota test-pod --namespace=test-pod --output=yaml
----------------
spec:
hard:
pods: "2"
status:
hard:
pods: "2"
used:
pods: "0"
命令输出显示了这个名字空间的Pod配额是2,由于目前没有Pod运行,所有配额并没有被使用。
创建deployment对象
test-pod-deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: test-pod
spec:
replicas: 3
template:
metadata:
labels:
purpose: test-pod
spec:
containers:
- name: test-pod
image: nginx
replicas: 3将令Kubernetes尝试创建3个Pod。
在test-pod命名空间中创建这个Deployment:
$ kubectl create -f test-pod-deployment.yaml
--namespace=qtest-pod
命令查看Deployment的详细信息:
$ kubectl get deployment test-pod --namespace=test-pod --output=yaml
----------
spec:
...
replicas: 3
...
status:
availableReplicas: 2
...
lastUpdateTime: 2017-07-07T20:57:05Z
message: 'unable to create pods: pods "pod-quota-demo-1650323038-" is forbidden:
exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'
从命令输出可以看到尽管在Deployment中我们设置了需要启动3个Pod实例,但由于test-pod命名空间配额的存在,只有两个Pod被成功创建。
配置默认的CPU请求与限额
创建一个LimitRange和一个Pod
cpu.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
在这个ares-cpu命名空间中创建这个LimitRange:
# kubectl create -f cpu.yaml --namespace=ares-cpu
现在如果在ares-cpu命名空间中创建一个容器,则该容器不需要指定它自己的CPU请求和CPU限额,容器会被赋予一个默认的CPU请求值0.5和一个默认的CPU限额值1。
总结
- 在命名空间运行的每一个容器必须含有它自己的CPU限额。
- 在命名空间中所有容器使用的CPU总量不能超出指定的限额。
- 如果只指定容器CPU限额,则容器CPU limits与CPU requests值相等
- 如果一个容器没有指定它自己的CPU限额,它将被赋予默认的限额值
配置最小和最大 CPU 限制
创建一个 LimitRange 和一个 Pod
cpu-constraints.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-min-max-demo
spec:
limits:
- max:
cpu: "800m"
min:
cpu: "200m"
type: Container
在ares-cpu命名空间下创建 LimitRange:
# kubectl create -f cpu-constraints.yaml --namespace=ares-cpu
在ares-cpu命名空间下查看 LimitRange 的详细信息:
# kubectl get limitrange cpu-min-max-demo --output=yaml --namespace=ares-cpu
---------------
limits:
- default:
cpu: 800m
defaultRequest:
cpu: 800m
max:
cpu: 800m
min:
cpu: 200m
type: Container
限制
- 如果容器没有指定自己的 CPU 请求(CPU request)和限制(CPU limit),系统将会为其分配默认值。
- 验证容器的 CPU 请求大于等于 200 millicpu,若小于200,则创建不成功
- 验证容器的 CPU 限制小于等于 800 millicpu,若大于800,则创建不成功
- 若容器没有指定自己的 CPU 请求和限制,所以它将从 LimitRange 获取 默认的 CPU 请求和限制值。
- LimitRange 在 namespace 中施加的最小和最大 CPU 限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。
配置默认的内存请求与限额
创建 LimitRange 和 Pod
memory.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
在 ares-mem命名空间中创建 LimitRange:
# kubectl create -f memory.yaml --namespace=ares-mem
现在如果在这个ares-mem命名空间中创建一个容器,并且该容器未指定它自己的内存请求与内存限额, 该容器会被赋予默认的内存请求值 256MiB 和默认的内存限额值 512MiB。
总结
- 在命名空间运行的每一个容器必须有它自己的内存限额
- 在命名空间中所有的容器使用的内存总量不能超出指定的限额
- 如果只指定内存限额,则容器mem limits与mem requests值相等
- 如果一个容器没有指定它自己的内存限额,它将被赋予默认的限额值
设置最小和最大内存限制
创建一个 LimitRange 和一个 Pod
memory-constraints.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo
spec:
limits:
- max:
memory: 1Gi
min:
memory: 500Mi
type: Container
在ares-mem命名空间下创建:
# kubectl create -f memory-constraints.yaml --namespace=ares-mem
查看 LimitRange 的详细信息:
# kubectl get limitrange mem-min-max-demo --namespace=ares-mem --output=yaml
-------------
limits:
- default:
memory: 1Gi
defaultRequest:
memory: 1Gi
max:
memory: 1Gi
min:
memory: 500Mi
type: Container
限制
- 内存限额默认值与配置文件中max memory一致!
- 如果容器没有指定自己的内存请求(request)和限制(limit),系统将会为其分配默认值。
- 验证容器的内存请求大于等于 500 MiB,若小于500M。则容器创建会失败
- 验证容器的内存限制小于等于 1 GiB,若大于1G,则容器创建会失败
- 若没有指定内存,则会使用默认的内存配额
- LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响
配置CPU和内存配额
创建ResourceQuota对象
quota-mem-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
在ares-mem-cpu命名空间中创建ResourceQuota对象:
kubectl create -f quota-mem-cpu.yaml --namespace=ares-mem-cpu
限制
- 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
- 所有容器的内存请求总额不得超过1 GiB。
- 所有容器的内存限额总额不得超过2 GiB。
- 所有容器的CPU请求总额不得超过1 CPU。
- 所有容器的CPU限额总额不得超过2 CPU。
- 想限制单个容器的上述各项指标,而非命名空间中所有容器的,可以使用LimitRange。
Kubernetes Namespaces的更多相关文章
- kubernetes traefik multiple namespaces
官方文档在此 https://docs.traefik.io/user-guide/kubernetes/ 官方文档在配置 RBAC 时使用了 ClusterRoleBinding, 当你想用多命名空 ...
- k8s--如何使用Namespaces
Namespaces 使用示例 Viewing namespaces Creating a new namespace Deleting a namespace Subdividing your cl ...
- Kubernetes命名空间
本文环境为Kubernetes V1.11,操作系统版本为 CentOs 7.3,Kubernetes集群安装可以参考 kubeadm安装kubernetes V1.11.1 集群 1. 什么是Nam ...
- 使用Kubernetes、K3s和Traefik2进行本地开发
作者简介 Vyacheslav,拥有运维和项目管理经验的软件工程师 这篇文章将承接我此前搭建的本地Docker开发环境,具体步骤已经放在在以下网址: https://github.com/Vorone ...
- K8S从入门到放弃
K8S介绍相关 kubernetes(K8S)集群及Dashboard安装配置 kubernetes(K8S)创建自签TLS证书 K8S Kubernetes 架构 K8S组件 K8S API对象 K ...
- Kubernetes-3.安装
docker version:19.03.14 kubernetes version:1.19.4 本文介绍使用kubeadm安装Kubernetes集群的简单过程. 目录 使用kubeadm安装k8 ...
- 安装krew
地址:https://krew.sigs.k8s.io/docs/user-guide/setup/install/ macOS/Linux Bash or ZSH shells 确保已安装git 2 ...
- kubernetes的namespaces总是Terminating
0.尝试强制删除不行 删除时带上–force --grace-period=0参数 ,无法删除:kubectl delete namespace rook-ceph --force --grace-p ...
- 【缺少kubernetes权限】 namespaces "xxx" is forbidden: User "xxx" cannot xxx resource "xxx" in API group "xxx" in the namespace "xxx"
需要添加权限,添加权限方式: https://github.com/argoproj/argo/issues/1068
随机推荐
- Linux系统:保证数据安全落盘
在很多IO场景中,我们经常需要确保数据已经安全的写到磁盘上,以便在系统宕机重启之后还能读到这些数据.但是我们都知道,linux系统的IO路径还是很复杂的,分为很多层,每一层都可能会有buffer来加速 ...
- 要想获取select的值,使用ng-modle,否则无法获取select 的值
ng-bind是从$scope -> view的单向绑定 ng-modle是$scope <-> view的双向绑定 <form role="form" c ...
- 【转载】 C#使用Newtonsoft.Json组件来反序列化字符串为对象
在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonCon ...
- Python illustrating Downhill simplex method for minimizing the user-supplied scalar function的代码
学习过程,把代码过程较好的代码段做个记录,如下的代码段是关于Python illustrating Downhill simplex method for minimizing the user-su ...
- SAP成都研究院的小伙伴们庆祝公司再次获得2019年最佳雇主的场景
日前,怡安集团旗下全球领先的人力资本管理咨询机构怡安翰威特与全球高管寻聘和领导力顾问公司史宾沙旗下Kincentric共同揭晓2019年中国最佳雇主榜单.SAP中国研究院凭借企业的创新文化和多元环境, ...
- 在Linux系统上安装Spring boot应用
Unix/Linux 服务 systemd 服务 操作过程 1. 安装了JDK的centOS7虚拟机 注意下载linux版本JDK的时候不能直接通过wget这种直接链接下载,否则会解压不成功,应该打开 ...
- IntelliJ IDEA快速自动生成Junit测试类
1.背景 测试是保证代码必不可少的环节,自己构建测试方法太慢,并且命名也不规范,idea中提供了,一键构建测试结构的功能...废话不多说,直接写步骤 2.步骤 1.在需要做测试的类的当前窗口,直接按快 ...
- 计算地图上两点间的距离PHP类
计算地图上两点间的距离,使用的是谷歌地图 <?php class GeoHelper { /** * @param int $lat1 * @param int $lon1 * @param i ...
- MySQL MHA候选主库选择
MHA在选择新主库时,会将所有存活的从库分为下面几类: 存活从库数组:挑选所有存活的从库 最新从库数组: 挑选Master_Log_File+Read_Master_Log_Pos最高的从库 优选从库 ...
- Linux操作系统故障排除之Grub信息被删除
Linux操作系统故障排除之Grub信息被删除 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. [root@yinzhengjie ~]# hexdump -C /dev/sda - ...