Kubernetes in Action笔记 - (4) 标签、注解与命名空间
标签
什么是标签
标签是可以附加到资源的任意键值对。通过标签选择器,可以筛选出具有该确切标签的资源。
使用标签和选择器来约束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 所使用的网络解决方案。
图书资料: