Kubernetes in Action笔记 - (4) 标签、注解与命名空间

Kubernetes in Action笔记 - (4) 标签、注解与命名空间

December 10, 2020

标签

什么是标签

标签是可以附加到资源的任意键值对。通过标签选择器,可以筛选出具有该确切标签的资源。

使用标签和选择器来约束pod调度

默认情况下,Pod基本上是随机地调度到任意Node节点的。但是某些情况下,想要调度到特定的Node节点,比如SSD硬盘的节点。这个时候,可以通过节点标签和节点标签选择器完成。

# 这个例子中通过nodeSelector选择部署到gpu=true的节点
apiVersion: vl
kind: Pod
metadata:
  name: kubia-gpu
spec:
  nodeSelector:
    gpu=true
  containers:
  - image: luksa/kubia
    name: kubia

注解

除标签外,pod和其他对象还可以包含注解。注解也是键值对, 但与标签不同, 注解并不是为了保存标识信息而存在的。

使用注解可以为每个pod或其他API对象添加说明,以便每个使用该集群的人都可以快速查找有关每个单独对象的信息。

命名空间

作用

k8s的命名空间简单地为对象名称提供了一个作用域。这样就可以将包含大量组件的复杂系统拆分为更小的不同组,这些不同组也可以用于在多租户环境中分配资源,将资源分配为生产、开发和 QA 环境,或者以其他任何你需要的方式分配资源。资源名称只需在命名空间内保持唯一即可,因此两个不同的命名空间可以包含同名的资源。

创建命名空间及其资源

可以使用yaml文件来创建命名空间

apiVersion: vl
kind: Namespace
metadata:
  name:custom-namespace

或者使用命令来创建命名空间

kubectl create namespace custom-namespace

想要在创建的命名空间中创建资源, 可以选择在 metadata 宇段中添加一个 namespace: custom-namespace 属性,也可以在使用 kubectl create命令创建资源时指定命名空间:

kubectl create -f kubia-manual.yaml -n custom-namespace

命名空间的切换

如果不指定命名空间, kubectl 将在当前上下文中配置的默认命名空间中执行操作。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config 命令进行更改。如果想要对其他命名空间中的对象进行操作, 需要给 kubectl 命令传递– namespace (或 -n) 选项。

要想快速切换到不同的命名空间, 可以设置以下别名,然后,可以使用 kcd some-namespace 在命名空间之间进行切换 。

alias kcd =’kubectl config set context $(kubectl config current-context) -- namespace’

命名空间的隔离性

尽管命名空间将对象分隔到不同的组,只允许你对属于特定命名空间的对象进行操作, 但实际上命名空间之间并不提供对正在运行的对象的任何隔离 。

例如,你可能会认为当不同的用户在不同的命名空间中部署 pod 时,这些 pod 应该彼此隔离,并且无法通信,但事实却并非如此。命名空间之间是否提供网络隔离取决于 Kubemetes 所使用的网络解决方案。


图书资料:

最后更新于