第17章学习笔记

97 阅读3分钟

命名空间 namespace 基本介绍

命名空间或者名称空间.

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

  • kubectl get nodes 获取所有节点.
  • kubectl get namespaces 获取所有命名空间. 或者 kubectl get ns.
  • kubectl create ns test 创建名为 test 的命名空间.
  • kubectl describe ns 命名空间 查看命名空间详情.
  • kubectl delete ns 名称空间 删除名称空间. 删除 namespace 会级联的删除其包含的所有其他资源对象.

namespace 应用场景说明

kube-system 命名空间为运行系统级资源的命名空间, 存放 k8s 的一些组件. 而 default 则为未指定名称空间的资源操作提供的一个默认值.

创建名称空间

  • kubectl config set-context --current --namespace=kube-system 切换命名空间. 切换命名空间后, kubectl get pods 如果不指定 -n 查看的就是 kube-system 命名空间的资源了.
  • kubectl api-resources --namespaced=true 查看哪些资源需要使用到命名空间. 即命名空间级别的资源.

命名空间资源限制

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

vim namespace-quota.yaml 创建资源文件, 资源文件编写的帮助信息可以通过 kubectl explain resourcequota 进行查看:

apiVersion: v1
kind: ResourceQuota  # 指定对资源做限制.
metadata:
  name: mem-cpu-quota
  namespace: test
spec:
  hard:  # 对硬件的限制.
    requests.cpu: "2"  # CPU 请求总额不得超过 2 CPU.
    requests.memory: 2Gi  # 容器内存请求总额不得超过 2GiB.
    limits.cpu: "4"  # CPU 限额总额不得超过 4CPU.
    limits.memory: 4Gi  # 内存限额总额不得超过 4GiB.

创建完毕之后, 执行 kubectl apply -f namespace-quota.yaml 应用配置. 执行 kubectl describe ns test 查看属性. 同时也可以执行 kubectl get resourcequota -n test 查看 test 命名空间的资源配额属性.

vim pod-test.yaml 创建资源文件, 执行 kubectl explain pods 查看编写的帮助信息:

apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  namespace: test
  labels:
    app: tomcat-pod-test
spec:
  containers:
  - name:  tomcat-test
    ports:
    - containerPort: 8080
    image: tomcat
    imagePullPolicy: IfNotPresent
    resources:
      limits:
        memory: "2Gi"
        cpu: "2"
      requests:
        memory: "100Mi"
        cpu: "500m"

执行 kubectl apply -f pod-test.yaml 应用并生成 pod. 执行 kubectl get pods -n test 获取 pod 信息. 执行 kubectl describe pods pod-test -n test 获取详细信息. 如果命名空间设置了资源配额, 则各个 pod 在创建的时候必须有 spec.resources 字段, 且其中的配置项不能大于命名空间中的配额.

资源标签 labels 具体使用方法

标签其实就是一堆 key/value, 被关联到对象上. 标签可以在创建一个对象的时候直接定义, 也可以在后期随时修改. 每一个对象可以拥有多个标签, 但是, key 值必须是唯一的. 创建标签之后也可以方法我们对资源进行分组管理. 如果对 pod 打标签, 之后就可以使用标签来查看, 删除指定的 pod. 在 k8s 中, 大部分资源都可以打标签.

  • kubectl label pods --help 查看如何给 pod 打标签.
  • kubectl label pods [pod名称] [key]=[val] 给指定的 pod 打上标签.
  • kubectl get pods [pod名称] --show-labels 显示 pod 的标签.
  • kubectl get pods --show-labels 获取所有 pod 及其标签.
  • kubectl get pods -l release=v1 获取所有拥有 release-v1 标签的 pod.
  • kubectl get pods -l release=v1 -L release 将 release 作为列显示出来.