参考整理于《kubernetes in Action》
本章内容涵盖
- 创建、 启动和停止 pod
- 使用标签组织 pod 和其他资源
- 使用特定标签对所有 pod 执行操作
- 使用命名空间将多个 pod 分到不重叠的组中
- 调度 pod 到指定类型的工作节点
标签
标签配置
查看标签
kubectl get pods 命令默认不会列出任何标签,但我们可以使用 --show-labels 选项来查看 :
kubectl get po --show-labels
如果你只对某些标签感兴趣,可以使用 L 选项指定它们并将它们分别显示在 自己的列中,而不是列出所有标签。
指定标签列查看
kubectl get po -L creation_method,env
添加标签:
kubectl label pod pod名 key=values
修改标签:
kubectl label pod pod名 key=values --overwrite
标签选择器
标签选择器允许我们选择标记有特定标签的 pod 子集, 并对这些 pod 执行操作。是一种能够根据是否包含key/values来进行过滤资源的准则。
标签选择器根据资源的以下条件来选择资源 :
- 包含或不包含特定键的标签
- 包含特定键和值的标签
- 包含特定键的标签,但其值与我们指定的不同(也就是not)
查看匹配 标签key=标签values 的pod
查看匹配 标签key的pod
查看 不包含标签env的pod
更多匹配:
- 匹配标签key不是标签values的pod creation_method!=manual
- 匹配带有 env 标签且值是 prod 或 devel 的 pod env in (prod, devel)
- 匹配带有 env 标签且值不是 prod 或 devel 的 pod env notin (prod, devel)
多条件匹配
使用逗号分隔的情况下,即可使用多个条件匹配。
节点标签
通过节点标签和节点标签选择器完成 把pod调度到符合条件的节点上
(标签相关的操作都一样,不区分具体是什么资源)
为节点添加标签
kubectl label node node名 标签key=标签values
查看匹配标签条件的node
kubectl get nodes -l 标签key=标签values
将 pod 调度到特定节点
通过节点选择器来实现:节点上打上需要的标签,然后在Pod的yaml文件中通过nodeSelector来进行匹配
以上只是一个关于标签和标签选择器是如何工作以及如何使用它们影响 Kubernetes 操作的快速演示。
注解
除了标签,pod和其他资源还可以包含注解。形式也是key:values,本质很相似。作用是为了展示任何你想要展示的信息。
查看注解
1、通过yaml形式
2、kubectl describe
添加、修改注解
我们己将注解 mycompany.com/someannotation 添加为值 foo bar。使用这种格式的注解键来避免键冲突是一个好方法。当不同的工具或库向对象添加注 解时,如果它们不像我们刚刚那样使用唯一的前缀,可能会意外地覆盖对方的注解。
命名空间
通过命名空间可以把资源对象分割成完全独立且不重叠的组,可以实现将包含大量组件的复杂系统拆分为更小的不同组,比如将资源分配为生产、开发和测试环境等,命名空间为资源名称提供了一个作用域。除了隔离资源,命名空间还可用于仅允许某些用户访问某些特定资源,甚至限 制单个用户可用的计算资源数量。相同命名空间内的资源名保证唯一即可,因此不同的命名空间下可以使用相同的资源名。这样可以注意 节点资源是全局独立不被约束在命名空间下的。
查看所有命名空间
kubectl get ns
如果没有单独指定命名空间,默认显示的就是default命名空间下的资源
查看指定的命名空间下的资源,使用方法:-n 命名空间 ,-n等同于--namespace
创建命名空间
1、通过编写yaml文件并提交到api server来创建
2、通过kubectl create namespace 命令的方式来创建
管理指定命名空间中的资源对象
在列出 描述、修改或删除其他命名空间中的对象时 需要给 kubectl 命令 传递--namespace (或-n) 选项
1、通过kubectl命令的方式指定 -n 命名空间
2、通过在创建资源的metadata字段中添加 namespace: 命名空间 的属性
提示:要想快速切换到不同的命名空间,可以设置以下别名:alias kcd='kubectl config set-context $(kubectl config current-context) --namespace'。 然后,可以使用 “kcd 命名空间” 在命名空间之间进行切换。
命名空间提供的隔离
尽管命名空间将资源对象分隔到了不同的组,只允许你对属于特定命名空间的对象进行操作,但是命名空间并不是想象中的做到资源完全隔离,比如网络隔离,这取决于 Kubernetes 所使用的网络解决方案。
停止和删除pod
在删除 pod 的过程中,实际上我 在指示 kubernetes 终止该 pod 中的所有容器。kubernetes向进程发送一个SIGTERM信号并等待默认30s,使其正常关闭。如果没有及时关闭,则通过SIGKILL终止该进程。因此,为了确保你 的进程总是正常关闭,进程需要正确处理 SIGTERM 信号。
1、按名称删除(可以同时指定多个pod名)
2、使用标签选择器删除 pod
3、通过删除整个命名空间来删除 pod(pod 将会 伴随命名空间 自动删除)
4、删除命名空间下所有pod
5、删除命名空间中的(几乎)所有资源(命令中的第一个 all 指定正在删除所有资源类型,而 --all 选项指定将删除 所有资源实例),但是有一些资源比如secret会被保留下来,并且需要被明确指定删除。
在本章中,你应该已经掌握 : ·
如何决定是否应将某些容器组合在一个 pod 中。
- pod 可以运行多个进程,这和非容器世界中的物理主机类似。
- 可以编写 YAML 或 JSON 描述文件用于创建 pod, 然后查看 pod 的规格及其 当前状态。
- 使用标签来组织 pod,并且一次在多个 pod 上执行操作。
- 可以使用节点标签将 pod 只调度到提供某些指定特性的节点上。
- 注解允许人们、工具或库将更大的数据块附加到 pod。
- 命名空间可用于允许不同团队使用同 一 集群,就像它们使用单独的 Kubemetes 集群一样。
- 使用 kubectl explain 命令快速查看任何 Kubernetes 资源的信息。