03-Kubernetes命名空间

1、什么是命名空间

Kubernetes支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为命名空间。

命名空间(namespace)是Kubernetes集群级别的资源,可以给不同的用户、租户、环境或者项目创建对应的命名空间,例如,可以给testdevlomentproduction环境分别创建各自的命名空间。

2、命名空间的应用场景

命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。

2.1 查看命名空间及其资源对象

k8s集群默认提供了几个名称空间用于特定目的,例如,kube-system主要用于运行系统级资源,存放k8s一些组件的。而default则为那些未指定名称空间的资源操作提供一个默认值。

使用kubectl get namespaces可以查看namespace资源,使用kubectl describe namespace $NAME可以查看特定的名称空间的详细信息。

kubectl get ns
kubectl get namespaces

kubectl describe namespaces kube-system
kubectl describe ns kubernetes-dashboard

2.2 管理命名空间资源

  • namespace资源属性较少,通常只需要指定名称即可创建,如kubectl create namespace qa

  • namespace资源的名称仅能由字母、数字、下划线、连接线等字符组成。

  • 删除namespace资源会级联删除其包含的所有其他资源对象。

3、命名空间使用案例

3.1 创建命名空间

kubectl create namespace test

image-20220308115339635

3.2 切换命名空间

kubectl config set-context --current --namespace=test

切换后kubeconfig文件也会自动改变:image-20220308115604265

3.3 查看哪些资源属于命名空间级别

kubectl api-resources --namespaced=true

命名空间级别的资源有:image-20220308115720953

3.4 命名空间资源限额

namespace是命名空间,里面有很多资源,那么我们可以对命名空间资源做个限制,防止该命名空间部署的资源超过限制。

我们可以在创建命名空间的时候就对该命名空间的资源进行限额。

通过资源清单对命名空间进行资源限额:

# namespace-test.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test
spec:
  finalizers:
    - kubernetes

---
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

创建的ResourceQuota对象将在test名字空间中添加以下限制:

  • 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
  • 所有容器的内存请求总额不得超过2GiB。
  • 所有容器的内存限额总额不得超过4 GiB。
  • 所有容器的CPU请求总额不得超过2 CPU。
  • 所有容器的CPU限额总额不得超过4CPU。

更新资源配置清单:

kubectl apply -f namespace-test.yaml

Kubernetes会自动创建命名空间并设置资源限额:image-20220308135551925

在有资源限额的命名空间中创建Pod必须设置资源限额,否则创建Pod会失败!

# pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    name: pod-test
spec:
  containers:
    - name: pod-test
      image: tomcat:8.5-jre8-alpine
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent

更新资源配置文件:

kubectl apply -f pod-test.yaml

由于没有设置资源限额,所以报错如下:image-20220308135904271

修改之后的资源配置文件:

# pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    name: pod-test
spec:
  containers:
    - name: pod-test
      image: tomcat:8.5-jre8-alpine
      resources:
        requests:
          memory: "128Mi"
          cpu: "500m"
        limits:
          memory: "256Mi"
          cpu: "1000m"
      ports:
        - containerPort: 8080
      imagePullPolicy: IfNotPresent

更新资源配置清单:

kubectl apply -f pod-test.yaml

kubectl get pods -n test -o wide

Pod成功创建:image-20220308140348675

posted @ 2022-05-17 22:34  StaryJie  阅读(165)  评论(0编辑  收藏  举报