Kubernetes 实战 —— 03. pod: 运行于 Kubernetes 中的容器 (5)

我们可以通过 kubectl get pod <pod-name> -o yaml 或者 kubectl describe pod <pod-name> 查看 pod 的详细信息,在其中就会看到对应的注解。

添加和修改注解 P75

kubectl annotate pod kubia-manual-gpu idealism/annotation='gpu required': 对 pod kubia-manual-gpu 添加或修改注解 idealism/annotation 的值为 gpu required 。 P74

使用前缀格式的注解键来避免键冲突是一个好方法,可以防止其他工具或库意外地覆盖自己的注解。 P75

使用命名空间对资源进行分组 P75

Kubernetes 命名空间简单地为对象名称提供了一个作用域。此时我们并不会将所有资源都放在同一个命名空间中,而是将它们组织到多个命名空间中,这样可以允许我们多次使用相同的资源名称(跨不同的命名空间)。 P75

了解对命名空间的需求 P75

在使用多个命名空间的前提下,我们可以将包含大量组件的复杂系统拆分成更小的不同组,这些不同组也可以用于在多租户环境中分配资源,将资源分配为生产、开发和 QA 环境,或者以其他任何需要的方式分配资源。资源名称只需要在命名空间内保持唯一即可,因此两个不同的命名空间可以包含同名的资源。 P75

大多数类型的资源都与命名空间相关,但仍有一些与它们无关,其中之一便是全局且未被约束于单一命名空间但节点资源。 P75

发现其他命名空间及其 pod P75

kubectl 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>: 创建一个指定名称的命名空间

管理其他命名空间中的对象 P77

kubectl create -n custom-namespace -f kubia-manual.yaml: 在 kubia-manual 命名空间中通过指定的 YAML 文件创建一个资源。

如果不指定命名空间, kubectl 将在当前上下文中配置的默认命名空间中执行操作。而当前上下文的命名空间和当前上下文本身都可以通过 kubectl config 命令进行更改。 P78

命名空间提供的隔离 P78

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

停止和移除 pod P78 按名称删除 pod P78

kubectl delete pod -n <namespace-name> <pod-name-1> [<pod-name-2> ...]: 删除指定命名空间下的指定 pod 。 P79

在删除 pod 的过程中,实际上我们在指示 Kubernetes 终止该 pod 中的所有容器。 Kubernetes 向进程发送一个 SIGTERM 信号并等待一定的秒数(默认为 30 秒),使其正常关闭,如果它没有即使关闭,则通过 SIGKILL 终止该进程。因此,为了确保你的进程总是正常关闭,进程需要正确处理 SIGTERM 信号。 P79

使用标签选择器删除 pod P79

kubectl delete pod -n <namespace-name> -l <label-key>=<label-value>: 删除指定命名空间下含有指定标签的所有 pod 。 P79

在微服务示例中,通过指定 rel=canary 标签选择器,可以一次删除所有金丝雀 pod 。 P79

图 3.10 通过 rel=canary 标签选择器选择并删除所有金丝雀 pod

通过删除整个命名空间来删除 pod P80

kubectl delete namespace custom-namespace: 删除整个 custom-namespace 命名空间( pod 将会随命名空间自动删除)

删除命名空间中的所有 pod ,但保留命名空间 P80

kubectl delete pod -n <namespace-name> --all: 删除指定命名空间中的所有 pod 。 P80

删除命名空间中的(几乎)所有资源 P80

kubectl delete all -n <namespace-name> --all: 删除指定命名空间中的所有资源。 all 指定删除所有资源类型, --all 选项指定删除所有资源实例。 P81

注意:使用 all 关键字并不会真的完全删除所有内容。一些资源会被保留下来,并且需要被明确指定删除。 P81

注意:该命令也会删除名为 kubernetes 的 Service ,但它会在几分钟后自动重新创建。 P81

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydpzz.html