Kubernetes学习笔记(二):Pod、标签、注解 (3)

env notin (prod)

-> [root@kube0.vm] [~] k get po --show-labels -l 'env notin (prod)' NAME READY STATUS RESTARTS AGE LABELS nginx-labels-1 1/1 Running 0 48m env=debug nginx-labels-2 1/1 Running 0 46m app=user,env=dev 使用标签选择器约束pod调度

其核心思想是,为工作节点(node)打上标签,比如地区、机房、CPU密集、IO密集等。然后在创建pod的描述文件时指定对应标签,调度器就会将pod调度到符合标签选择器规则的工作节点上。

现在假设一个场景:需要将新建的pod调度到IO密集的工作节点上。

给node打标签 -> [root@kube0.vm] [~] k label node kube1.vm io=true node/kube1.vm labeled -> [root@kube0.vm] [~] k get node -L io NAME STATUS ROLES AGE VERSION IO kube0.vm Ready master 19h v1.17.3 kube1.vm Ready <none> 19h v1.17.3 true kube2.vm Ready <none> 19h v1.17.3 nginx-io.yaml

带有选择器的yaml

apiVersion: v1 kind: Pod metadata: name: nginx-io spec: nodeSelector: # 选择器 io: "true" containers: - image: nginx name: nginx

创建pod,查看结果确实是运行在kube1.vm上。

-> [root@kube0.vm] [~] k create -f nginx-io.yaml pod/nginx-io created -> [root@kube0.vm] [~] k get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-io 1/1 Running 0 42s 10.244.1.7 kube1.vm <none> <none> 注解

注解也是键值对,与标签类似,但注解并不用于标识和选择对象。
注解主要为Pod和其他API对象添加说明,以便每个使用集群的人可以快速查找与对象有关的信息。

kubectl annotate

使用kubectl annotate为pod添加注解,同样修改已存在的注解需要指定--overwrite

-> [root@kube0.vm] [~] k annotate po nginx-io my.com/someannotation="123" pod/nginx-io annotated

查看

-> [root@kube0.vm] [~] k describe po nginx-io .......... Annotations: my.com/someannotation: 123 .......... 命名空间

简单讲,命名空间为Pod等资源提供了作用域,在不同命名空间内的资源名称可以相同。
我们之前一致使用的是默认命名空间:default,之前的 nginx-xxx 这些pod都位于这个命名空间。

查看命名空间 -> [root@kube0.vm] [~] k get ns #ns是namespace缩写 NAME STATUS AGE default Active 21h kube-node-lease Active 21h kube-public Active 21h kube-system Active 21h kubectl create namespace

使用kubectl create创建一个namespace,当然也可以写一个描述文件创建(麻烦了点)。

-> [root@kube0.vm] [~] k create ns test namespace/test created -> [root@kube0.vm] [~] k get ns -o wide NAME STATUS AGE ........ test Active 94s 为资源指定命名空间

可以在描述文件的metadata下添加一个字段namespace: test,或者在命令行的时候指定kubectl create -f xxx.yaml -n test。

命名空间的误解

首先要明确的是:命名空间并不提供对正在运行的对象的任何隔离
举个例子:两个pod并不会因为在不同的命名空间而无法进行网络通信,是否可以通信不取决于命名空间,而取决于网络解决方案。

kubectl delete 按名字删除pod k delete po nginx-io 使用标签选择器删除 k delete po -l app 删除所有pod k delete po --all 删除命名空间 k delete ns test 删除命名空间(几乎)所有资源

第一个 all 表示当前命名空间所有资源类型,第二个 --all 表示所有资源实例。

k delete all --all 小结

如何决定多个容器是否应该放在一个pod

通过提交描述文件创建API对象

使用标签组织API对象

通过标签选择器调度pod

命名空间使不同团队很方便的使用同一个集群

一些命令:create、get、delete、label、annotate、port-forward、describe、logs、explain

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

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