node/k8snode2 labeled
#然后再查看去label哪里就能看到了

#定义 pod 的时候指定要调度到具有 disk=ceph 标签的 node 上
[root@k8smaster node]# vim pod-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo-pod-1
namespace: default
labels:
app: myapp
env: dev
spec:
nodeSelector:
disk: ceph
containers:

  • name: tomcat-pod-java
    ports:
    • containerPort: 8080
      image: tomcat
      imagePullPolicy: IfNotPresent

[root@k8smaster node]# kubectl apply -f pod-1.yaml
pod/demo-pod-1 created

#查看 pod 调度到哪个节点
[root@k8smaster node]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE demo-pod-1 1/1 Running 0 8s 10.244.1.19 k8snode2
#如果标签和nodename都有的话 优先选择好的node。


## 污点和污点容忍


### 污点容忍


污点容忍就是某个节点可能被调度,也可能不被调度


### node 节点亲和性


node 节点亲和性调度:nodeAffinity 用帮助文档查看亲和性字段下面的东西



[root@k8smaster node]# kubectl explain pods.spec.affinity
KIND: Pod
VERSION: v1

RESOURCE: affinity

DESCRIPTION:
If specified, the pod’s scheduling constraints

Affinity is a group of affinity scheduling rules.

FIELDS:
nodeAffinity
Describes node affinity scheduling rules for the pod.

podAffinity

podAntiAffinity
#有node节点亲和性 pode节点亲和性等,然后我们再详细的看看nodeAffinity 。

[root@k8smaster node]# kubectl explain pods.spec.affinity.nodeAffinity
KIND: Pod
VERSION: v1

RESOURCE: nodeAffinity

DESCRIPTION:
Describes node affinity scheduling rules for the pod.

Node affinity is a group of node affinity scheduling rules.

FIELDS:
preferredDuringSchedulingIgnoredDuringExecution <[]Object>

requiredDuringSchedulingIgnoredDuringExecution

#prefered 表示有节点尽量满足这个位置定义的亲和性,这不是一个必须的条件,软亲和性,没满足也可能调度。
#require 表示必须有节点满足这个位置定义的亲和性,这是个硬性条件,硬亲和性,没满足不可能调度。

[root@k8smaster node]# kubectl explain pods.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution
KIND: Pod
VERSION: v1

RESOURCE: requiredDuringSchedulingIgnoredDuringExecution

DESCRIPTION:
If the affinity requirements specified by this field are not met at
scheduling time, the pod will not be scheduled onto the node. If the
affinity requirements specified by this field cease to be met at some point
during pod execution (e.g. due to an update), the system may or may not try
to eventually evict the pod from its node.

A node selector represents the union of the results of one or more label
queries over a set of nodes; that is, it represents the OR of the selectors
represented by the node selector terms.

FIELDS:
nodeSelectorTerms <[]Object> -required- #必写字段,对象列表

[root@k8smaster node]# kubectl explain pods.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTermsKIND: Pod
VERSION: v1

RESOURCE: nodeSelectorTerms <[]Object>

DESCRIPTION:
Required. A list of node selector terms. The terms are ORed.

A null or empty node selector term matches no objects. The requirements of
them are ANDed. The TopologySelectorTerm type implements a subset of the
NodeSelectorTerm.

FIELDS:
matchExpressions <[]Object> #匹配表达式的
A list of node selector requirements by node’s labels.

matchFields <[]Object> #匹配字段的
A list of node selector requirements by node’s fields.

[root@k8smaster node]# kubectl explain pods.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions
KIND: Pod
VERSION: v1

RESOURCE: matchExpressions <[]Object>

DESCRIPTION:
A list of node selector requirements by node’s labels.

 A node selector requirement is a selector that contains values, a key, and
 an operator that relates the key and values.

FIELDS:
key -required- #检查 label

operator -required- #做等值选则还是不等值选则

values <[]string> #给定的值
#在做node节点亲和性的时候,values是标签的值,他会通过op匹配相等的key或者不等的key。

例 1:使用 requiredDuringSchedulingIgnoredDuringExecution 硬亲和性
#node1 node2都拉nginx

[root@k8smaster node]# vim pod-nodeaffinity-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-node-affinity-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: nginx
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar


affinity:亲和性,下面的node是node亲和性,然后requ硬亲和性,nodeselect是对象列表,我们用-链接,然后match也是对象列表,同上,key是zone,然后等值关系,值是foo和bar。  
 这个yaml意思是:我们检查当前节点中有任意一个节点拥有 zone 标签的值是 foo 或者 bar,就可以把 pod 调度到这个 node 节点的 foo 或者 bar 标签上的节点上,现在找不到,因为没打标签!



[root@k8smaster node]# kubectl apply -f pod-nodeaffinity-demo.yaml
pod/pod-node-affinity-demo created
[root@k8smaster node]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo 0/1 Pending 0 11s

status 的状态是 pending,上面说明没有完成调度,因为没有一个拥有 zone 的标签的值是 foo 或者 bar,而且使用的是硬亲和性,必须满足条件才能完成调度。

[root@k8smaster node]# kubectl label nodes k8snode zone=foo
node/k8snode labeled
#给这个节点打上标签 zone=foo,在查看
[root@k8smaster node]# kubectl get pods -o wide 显示running了
pod-node-affinity-demo 1/1 Running 0 4m4s 10.244.2.19 k8snode

例 2:使用 preferredDuringSchedulingIgnoredDuringExecution 软亲和性
[root@k8smaster node]# vim pod-nodeaffinity-demo-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-node-affinity-demo-2
namespace: default
labels:
app: myapp
tier: frontend

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

73)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐