假设我有一个具有2个节点的群集和一个具有2个副本的POD。我是否可以保证将我的2个副本部署在2个不同的节点中。这样,当节点关闭时,应用程序将继续运行。默认情况下,调度程序是否在“尽力而为”模式下工作以在不同的节点中分配2个副本?
答案 0 :(得分:2)
吊舱反亲和力也可以互相排斥吊舱。因此无法在同一节点上安排两个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。
答案 1 :(得分:0)
您可以使用kind: DeamonSet
。这是Kubernetes DeamonSet文档的链接。
DaemonSet 确保所有(或某些)节点都运行Pod的副本。将节点添加到群集时,会将Pods添加到它们。当节点从群集中删除时,这些Pod会被垃圾收集。删除DaemonSet将清除其创建的Pod。
此处是指向有关DeamonSets in OpenShift的文档的链接 示例可能如下所示:
这在Openshift> = 3.2版本的openshift上可用此用例是在所有节点(或具有特定标签的设置节点)上运行特定的docker容器(veermuchandi / welcome)
启用在Openshift上公开的HostPorts
$ oc edit scc限制为#as system:admin用户
更改allowHostPorts:正确并保存
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 create -f myDaemonset.yaml #with system:admin用户
可用资源here
答案 2 :(得分:0)
Daemonset不是一个好的选择。它将在每个节点上调度一个Pod。将来,如果您扩展集群,然后将Pod扩展到与节点一样多。而是使用Pod关联性在任何节点上调度不超过一个Pod