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

时间:2019-01-25 10:33:51

标签: kubernetes openshift

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

3 个答案:

答案 0 :(得分:2)

Pod AntiAffinity

吊舱反亲和力也可以互相排斥吊舱。因此无法在同一节点上安排两个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