今天我们学习k8s另外一个必须要掌握的知识:Namespaces
01Namespaces基本操作
Namespaces表示名字空间,用于分隔资源存储资源,创建多个虚拟集群。
当团队或项目中具有许多用户时,可以考虑使用Namespace来区分,a如果是少量用户集群,可以不需要考虑使用Namespace,如果需要它们提供特殊性质时,可以开始使用Namespace。Namespace为名称提供了一个范围。资源的Names在Namespace中具有唯一性。Namespace是一种将集群资源划分为多个用途(通过 resource quota)的方法。在未来的Kubernetes版本中,默认情况下,相同
Namespace中的对象将具有相同的访问控制策略。对于稍微不同的资源没必要使用多个Namespace来划分,例如同意软件的不同版本,可以使用labels(标签)来区分同一Namespace中的资源。
Kubernetes 从四个初始命名空间开始:
default
Kubernetes 包含此命名空间,以便您无需先创建命名空间即可开始使用新集群。
kube-node-lease
此命名空间包含与每个节点关联的租约对象。节点租约允许 kubelet 发送检测信号,以便控制平面可以检测到节点故障。
kube-public
此命名空间可由所有客户端(包括未经身份验证的客户端)读取。此命名空间主要保留用于群集,以防某些资源在整个群集中公开可见和可读。此命名空间的公共方面只是一个约定,而不是一个要求。
kube-system
由 Kubernetes 系统创建的对象的命名空间。
查看名字空间
查看名字空间命令
kubectl get namespaces
也可以使用缩写查看
kubectl get ns
创建名字空间
创建名字空间有两种方法,一是使用命令;二是使用yaml文件
使用命令创建名字空间的语法如下:
kubectl create namespace new-namespace
如:
kubectl create namespace test001
也可以构造一个yaml文件进行创建
yaml文件内容如下:
piVersion: v1
kind: Namespace
metadata:
name: test001
再执行以下命令即可以创建一个名字空间
kubectl create -f my-namespace.yaml
删除名字空间
删除名字空间的语法:
kubectl delete namespaces new-namespace
如:
kubectl delete namespaces test001
02Namespaces配置Pod配额
首先创建一个命名空间,这样可以将本次操作中创建的资源与集群其他资源隔离开来。
kubectl create namespace quota-pod-example
再创建ResourceQuota
下面是 ResourceQuota 的示例清单:
创建一个quota-pod.yaml,并在文件清单中填入以下内容:
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-demo
spec:
hard:
pods: "2"
再使用以下命令进行创建
kubectl apply -f quota-pod.yaml
再使用以下命令查看刚才所创建的pod详情
kubectl get resourcequota pod-demo -n default --output=yaml
删除名字空间
语法如下
kubectl delete namespace 名字空间名
如:
kubectl delete namespace test001
03配置CPU请求和限额
一个 Kubernetes 集群可被划分为多个命名空间。如果你在具有默认 CPU限制 的命名空间内创建一个 Pod,并且这个 Pod 中任何容器都没有声明自己的 CPU 限制, 那么控制面会为容器设定默认的 CPU限制。
创建一个命名空间,以便本练习中创建的资源和集群的其余部分相隔离。
kubectl create namespace default-cpu-example
创建 LimitRange 和 Pod
以下为 LimitRange 的示例清单。清单中声明了默认 CPU 请求和默认 CPU 限制。
创建cpu-defaults.yaml文件,并在文件中写入如下文件清单
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
在命名空间 default-cpu-example 中创建 LimitRange 对象:
kubectl apply -f cpu-default.yaml --namespace=default-cpu-example
现在如果你在 default-cpu-example 命名空间中创建一个 Pod, 并且该 Pod 中所有容器都没有声明自己的 CPU 请求和 CPU 限制, 控制面会将 CPU 的默认请求值 0.5 和默认限制值 1 应用到 Pod 上。
以下为只包含一个容器的 Pod 的清单。该容器没有声明 CPU 请求和限制。
创建cpu-dafaults-pod.yaml文件,并写入以下文件清单
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo
spec:
containers:
- name: default-cpu-demo-ctr
image: nginx
查看pod详情:
kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example
你只声明容器的限制