@weakiwi
2017-05-19T07:50:55.000000Z
字数 2839
阅读 889
翻译
apiVersion: v1kind: Podmetadata:name: test1spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "mysvc"operator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
,可知当使用requiredDuringSchedulingIgnoredDuringExecution参数时,如果无法满足affinity条件,pod无法启动kubectl label po test1 mysvc=S1``kubectl label po test1 mysvc=S1修改pod标签使pod满足条件,通过kubectl get pod,可观察到pod状态变为running
。再执行kubectl label po test1 mysvc-删除pod的标签,使pod不满足affinity条件,发现pod转态仍为running。由此确定schedule状态包含pending而且在IgnoredDuringExecutio
n条件下,在执行期间发生条件改变,对pod的状态是不会产生影响的。
apiVersion: v1kind: Podmetadata:name: test1spec:affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
通过配置文件产生pod,观察可得pod的状态为running,由此可知preferredDuringScheduling下的affinity为非必须条件。
apiVersion: v1kind: Podmetadata:name: test4labels:security: S1spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
使用该文件创建3个pod,可以发现3个pod运行在不同的node上。
。如果再创建一个pod,可以观察到该pod处于pending状态。因为在该环境只有三台worknode,符合条件的所有worknode均被占用。
apiVersion: v1kind: Podmetadata:name: test3labels:security: S1spec:affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
使用该配置模板创建三个pod,可以发现pod依旧分配到了不同的节点上。当创建第四个pod时,第四个pod能够被顺利创建,说明preferredDuringScheduling在podAntiAnffinity下也是不严格匹配规则。
apiVersion: v1kind: Podmetadata:name: test3labels:security: S1spec:containers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
以及
apiVersion: v1kind: Podmetadata:name: test2labels:security: S1spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- S1topologyKey: kubernetes.io/hostnamecontainers:- name: dao-2048image: daocloud.io/daocloud/dao-2048imagePullPolicy: IfNotPresent
先使用第二个配置文件创建两个pod,再用第一个文件创建一个pod,可以观察到,三个pod在三个不同的node上。
,说明当设置test1对test2排他,不用设置test2对test1排他。