我们可以通过 kubectl get pod <pod-name> -o yaml 或者 kubectl describe pod <pod-name> 查看 pod 的详细信息,在其中就会看到对应的注解。
添加和修改注解 P75kubectl annotate pod kubia-manual-gpu idealism/annotation='gpu required': 对 pod kubia-manual-gpu 添加或修改注解 idealism/annotation 的值为 gpu required 。 P74
使用前缀格式的注解键来避免键冲突是一个好方法,可以防止其他工具或库意外地覆盖自己的注解。 P75
使用命名空间对资源进行分组 P75Kubernetes 命名空间简单地为对象名称提供了一个作用域。此时我们并不会将所有资源都放在同一个命名空间中,而是将它们组织到多个命名空间中,这样可以允许我们多次使用相同的资源名称(跨不同的命名空间)。 P75
了解对命名空间的需求 P75在使用多个命名空间的前提下,我们可以将包含大量组件的复杂系统拆分成更小的不同组,这些不同组也可以用于在多租户环境中分配资源,将资源分配为生产、开发和 QA 环境,或者以其他任何需要的方式分配资源。资源名称只需要在命名空间内保持唯一即可,因此两个不同的命名空间可以包含同名的资源。 P75
大多数类型的资源都与命名空间相关,但仍有一些与它们无关,其中之一便是全局且未被约束于单一命名空间但节点资源。 P75
发现其他命名空间及其 pod P75kubectl get namespaces: 列出集群中的所有命名空间
kubectl get pods -n kube-system: 列出 kube-system 命名空间下的所有 pod
命名空间的优点 P76
可以隔离资源,将不属于一组的资源分到不重叠的组中,避免无意中修改或删除其他用户的资源,也无须关心名称冲突
可用于仅允许某些用户访问某些特定的资源,甚至限制单个用户可用的计算资源数量
创建一个命名空间 P76命名空间是一种和其他资源一样的 Kubernetes 资源,因此可以通过 YAML 文件提交到 Kubernetes API 服务器来创建该资源。 P76
从 YAML 文件创建命名空间 P77
kubectl create -f custom-namespace.yaml 可以通过 YAML 文件创建命名空间。
Kubernetes 中的所有内容都是一个 API 对象,可以通过向 API 服务器提交 YAML 文件来实现创建、读取、更新和删除。 P77
# 遵循 v1 版本的 Kubernetes API apiVersion: v1 # 资源类型为 Namespace kind: Namespace metadata: # 命名空间的名称 name: custom-namespace使用 kubectl create namespace 命令创建命名空间 P77
kubectl create namespace <namespace-name>: 创建一个指定名称的命名空间
管理其他命名空间中的对象 P77kubectl create -n custom-namespace -f kubia-manual.yaml: 在 kubia-manual 命名空间中通过指定的 YAML 文件创建一个资源。
如果不指定命名空间, kubectl 将在当前上下文中配置的默认命名空间中执行操作。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config 命令进行更改。 P78
命名空间提供的隔离 P78尽管命名空间将对象分隔到不同更多组,只允许你对属于特定命名空间的对象进行操作,但实际上命名空间之间并不提供对正在运行对对象对任何隔离。 P78
停止和移除 pod P78 按名称删除 pod P78kubectl delete pod -n <namespace-name> <pod-name-1> [<pod-name-2> ...]: 删除指定命名空间下的指定 pod 。 P79
在删除 pod 的过程中,实际上我们在指示 Kubernetes 终止该 pod 中的所有容器。 Kubernetes 向进程发送一个 SIGTERM 信号并等待一定的秒数(默认为 30 秒),使其正常关闭,如果它没有即使关闭,则通过 SIGKILL 终止该进程。因此,为了确保你的进程总是正常关闭,进程需要正确处理 SIGTERM 信号。 P79
使用标签选择器删除 pod P79kubectl delete pod -n <namespace-name> -l <label-key>=<label-value>: 删除指定命名空间下含有指定标签的所有 pod 。 P79
在微服务示例中,通过指定 rel=canary 标签选择器,可以一次删除所有金丝雀 pod 。 P79
通过删除整个命名空间来删除 pod P80kubectl delete namespace custom-namespace: 删除整个 custom-namespace 命名空间( pod 将会随命名空间自动删除)
删除命名空间中的所有 pod ,但保留命名空间 P80kubectl delete pod -n <namespace-name> --all: 删除指定命名空间中的所有 pod 。 P80
删除命名空间中的(几乎)所有资源 P80kubectl delete all -n <namespace-name> --all: 删除指定命名空间中的所有资源。 all 指定删除所有资源类型, --all 选项指定删除所有资源实例。 P81
注意:使用 all 关键字并不会真的完全删除所有内容。一些资源会被保留下来,并且需要被明确指定删除。 P81
注意:该命令也会删除名为 kubernetes 的 Service ,但它会在几分钟后自动重新创建。 P81