Развернуты ли две копии модулей OpenShift на двух разных узлах (когда #nodes> 2)? - PullRequest
0 голосов
/ 25 января 2019

Предположим, у меня есть кластер с 2 узлами и POD с 2 репликами.Могу ли я иметь гарантию, что мои 2 реплики развернуты в 2 разных узлах.Так что, когда узел не работает, приложение продолжает работать.По умолчанию планировщик работает в режиме наилучшего усилия для назначения 2 реплик в разных узлах?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Daemonset не является хорошим вариантом. Это запланирует один модуль на каждом узле. В будущем, если вы масштабируете свой кластер, а затем стручки масштабируются так же, как и узлы. Вместо этого используйте привязку к модулю, чтобы запланировать не более одного модуля на любом узле

0 голосов
/ 29 января 2019

Pod AntiAffinity

Стручок анти-сродства может также отталкивать стручок друг от друга. поэтому на одном узле нельзя запланировать два модуля.

Используйте следующие конфигурации.

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

При этом будет использоваться функция анти-сродства, поэтому, если у вас более 2 узлов, будет гарантировано, что на одном узле не будет запланировано два модуля.

0 голосов
/ 25 января 2019

Вы можете использовать kind: DeamonSet. Вот ссылка на документацию Kubernetes DeamonSet .

A DaemonSet гарантирует, что все (или некоторые) Узлы запускают копию Pod. Когда узлы добавляются в кластер, к ним добавляются модули. Когда узлы удаляются из кластера, эти модули удаляются. Удаление DaemonSet приведет к очистке созданных им модулей.

Вот ссылка на документацию о DeamonSets в OpenShift Пример может выглядеть следующим образом:

Это доступно в Openshift> = версия 3.2 openshift. Этот вариант использования предназначен для запуска определенного контейнера-докера (veermuchandi / welcome) на всех узлах (или набора узлов с определенной меткой

Включить выставление HostPorts в Openshift

$ oc edit 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 create -f myDaemonset.yaml # с системой: пользователь с правами администратора

Источник доступен здесь

...