Kubernetes 支持多个虚拟集群,运源课它们底层依赖于同一个物理集群。器管这些虚拟集群被称为命名空间。理资
命名空间namespace是程引k8s集群级别的资源,可以给不同的运源课用户、租户、器管环境或项目创建对应的理资命名空间,例如,程引可以为test、运源课devlopment、器管production环境分别创建各自的理资命名空间。

namespace应用场景
命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几个到几十个用户的运源课集群,根本不需要创建或考虑命名空间。器管
| 查看名称空间及其资源对象
k8s集群默认提供了几个名称空间用于特定目的理资,源码库例如:kube-system主要用于运行系统级资源,存放k8s一些组件的;而default则为那些未指定名称空间的资源操作提供一个默认值。
使用kubectl get namespace可以查看namespace资源,使用kubectl describe namespace $NAME可以查看特定的名称空间的详细信息。
# 查看已经存在的命名空间信息 [root@k8s-master-01 ~]# kubectl get namespace/ns(缩写) NAME STATUS AGE default Active 102d kube-node-lease Active 102d kube-public Active 102d kube-system Active 102d test Active 61d # 查看详细命名空间信息情况 [root@k8s-master-01 ~]# kubectl describe namespace default Name: default Labels: <none> Annotations: <none> Status: Active No resource quota. No LimitRange resource. …省略部分信息…| 管理namespace资源
namespace资源属性较少,通常只需要指定名称即可创建,如“kubectl create namespace qa”。
namespace资源的名称仅能由字母、数字、下划线、连接线等字符组成。
删除namespace资源会级联删除其包含的所有其他资源对象。
# 创建新的命名空间资源信息: [root@k8s-master-01 ~]# kubectl create ns test namespace/test created [root@k8s-master-01 ~]# kubectl get ns NAME STATUS AGE test Active 4s # 删除已有命名空间资源信息: [root@k8s-master-01 ~]# kubectl delete ns test --- 删除操作比较危险,慎用namespace应用案例
创建指定命名空间:
[root@k8s-master-01 ~]# kubectl create ns test [root@k8s-master-01 ~]# kubectl get ns test NAME STATUS AGE test Active 61d切换指定命名空间:
切换命名空间后,kubectl get pods 如果不指定-n,查看的就是kube-system命名空间的资源了。
[root@k8s-master-01 ~]# kubectl config set-context --current --namespace=kube-system Context "kubernetes-admin@kubernetes" modified. 说明:表示从默认所在的云服务器提供商default的命名空间状态,切换到指定的命名空间资源中 [root@k8s-master-01 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE calico-kube-controllers-6949477b58-5dqv4 1/1 Running 1 61d calico-node-4ggj8 1/1 Running 1 102d calico-node-4rmhx 1/1 Running 1 102d calico-node-5xmjw 1/1 Running 2 102d coredns-7f89b7bc75-krpzf 1/1 Running 1 61d coredns-7f89b7bc75-qvj5m 1/1 Running 1 61d etcd-k8s-master-01 1/1 Running 1 102d etcd-k8s-master-02 1/1 Running 1 102d kube-apiserver-k8s-master-01 1/1 Running 1 102d kube-apiserver-k8s-master-02 1/1 Running 1 102d kube-controller-manager-k8s-master-01 1/1 Running 4 102d kube-controller-manager-k8s-master-02 1/1 Running 4 102d kube-proxy-2zrtt 1/1 Running 1 102d kube-proxy-dcxsv 1/1 Running 2 102d kube-proxy-hs8x2 1/1 Running 1 102d kube-scheduler-k8s-master-01 1/1 Running 4 102d kube-scheduler-k8s-master-02 1/1 Running 4 102d [root@k8s-master-01 ~]# kubectl config set-context --current --namespace=default Context "kubernetes-admin@kubernetes" modified. 说明:表示从指定的命名空间所在的状态,切换到default的命名空间资源中 [root@k8s-master-01 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-test-75c685fdb7-6g5m7 1/1 Running 1 61d nginx-test-75c685fdb7-6j9s8 1/1 Running 1 61d pod-first 1/1 Running 0 54m获取命名空间资源:(了解哪些资源是命名空间级别的资源)
[root@k8s-master-01 ~]# kubectl api-resources --namespaced=true NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 true Binding configmaps cm v1 true ConfigMap endpoints ep v1 true Endpoints events ev v1 true Event limitranges limits v1 true LimitRange persistentvolumeclaims pvc v1 true PersistentVolumeClaim pods po v1 true Pod …省略部分信息..namespace资源限额
namespace是命名空间,在命名空间里有很多资源,那么如何对命名空间资源做限制处理?从而防止该命名空间部署的资源超过限制。
[root@xianchaomaster1~]# vim namespace-quota.yaml apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-quota namespace: test spec: hard: requests.cpu: "2" requests.memory: 2Gi limits.cpu: "4" limits.memory: 4Gi [root@k8s-master-01 quota]# kubectl apply -f namespace-quota.yaml resourcequota/mem-cpu-quota created [root@k8s-master-01 quota]# kubectl describe ns test Name: test Labels: <none> Annotations: <none> Status: Active Resource Quotas Name: mem-cpu-quota Resource Used Hard -------- --- --- limits.cpu 0 4 limits.memory 0 4Gi requests.cpu 0 2 requests.memory 0 2Gi No LimitRange resource.创建的ResourceQuota对象将在test名字空间中添加以下限制:
每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
所有容器的内存请求总额不得超过2 GiB。 所有容器的内存限额总额不得超过4 GiB。 所有容器的CPU请求总额不得超过2 CPU。 所有容器的CPU限额总额不得超过4 CPU。 # 创建pod时候必须不能超过资源限额,否则创建失败,香港云服务器如下: [root@xianchaomaster1 ~]# vim pod-test.yaml apiVersion: v1 kind: Pod metadata: name: pod-test namespace: test labels: app: tomcat-pod-test spec: containers: - name: tomcat-test ports: - containerPort: 8080 image: xianchao/tomcat-8.5-jre8:v1 imagePullPolicy: IfNotPresent [root@xianchaomaster1 ~]# kubectl apply -f pod-test.yaml [root@xianchaomaster1 ~]# kubectl get pods –n test [root@xianchaomaster1 ~]# kubectl describe pods pod-test –n test(责任编辑:IT科技)