2 个 OpenShift Pod 副本是否部署在两个不同的节点上(当 #nodes > 2 时)?



假设我有一个包含2个节点的集群和一个包含两个副本的POD。我可以保证我的2个副本部署在2个不同的节点中吗。这样,当一个节点关闭时,应用程序就会继续运行。默认情况下,调度程序是否在尽力而为模式下工作,以便在不同的节点中分配2个副本?

Pod AntiAffinity

Pod的抗亲和性也可以使Pod相互排斥。所以不能在同一节点上调度两个pod。

使用以下配置。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: "kubernetes.io/hostname"
containers:
- name: nginx
image: nginx

这将使用反亲和功能,因此如果您有两个以上的节点,则可以保证不会在同一节点上安排两个pod。

您可以使用kind: DeamonSet。这里有一个指向Kubernetes DeamonSet文档的链接。

DaemonSet确保所有(或某些)节点运行Pod的副本。随着节点被添加到集群中,Pod也被添加到其中。当节点从集群中移除时,这些Pod将被垃圾收集。删除DaemonSet将清理它创建的Pod。

以下是OpenShift中有关DeamonSets的文档链接示例可能如下所示:

这在Openshift上可用>=3.2版本的openshift这个用例是在所有节点(或一组带有特定标签的节点)上运行一个特定的docker容器(veemuchandi/welcome)

在Openshift 上启用主机端口公开

$oc编辑scc受限#为系统:管理员用户

更改allowHostPorts:true并保存

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: welcome
spec:
template:
metadata:
name: welcome
labels:
daemon: welcome
spec:
containers:
- name: c
image: veermuchandi/welcome
ports:
- containerPort: 8080
hostPort: 8080
name: serverport

$oc创建-f myDaemonet.yaml#,带有系统:admin用户

此处提供源

Daemoset不是一个好的选择。它将在每个节点上安排一个pod。在未来,如果您缩放集群,然后pod会缩放到与节点一样多的节点。相反,使用pod仿射在任何节点上调度不超过一个pod

最新更新