Kubernetes: как настроить группу модулей для развертывания на одном узле?

Пример использования такой:

Итак, у нас есть несколько модулей, использующих один и тот же persistentVolumeClaim с accessMode, установленным на ReadWriteOnce (поскольку класс хранения PersistentVolume поддерживает только ReadWriteOnce).

Из https://kubernetes.io/docs/concepts/storage/persistent-volumes/,

ReadWriteOnce -- the volume can be mounted as read-write by a single node

Таким образом, эти модули должны быть развернуты на одном узле, чтобы получить доступ к PVC (в противном случае они потерпят неудачу).

Я хотел бы спросить, есть ли какие-либо способы настроить yaml-файл развертывания, чтобы их можно было развернуть на одном узле? или есть способы решить эту проблему?


person Ken Tsoi    schedule 15.12.2020    source источник
comment
Известно ли вам о сходство между пакетами?   -  person Chin Huang    schedule 16.12.2020
comment
Спасибо @ChinHuang за просветление, я пытался реализовать это, но столкнулся с некоторыми проблемами, можете ли вы проверить мой новый вопрос: stackoverflow.com/questions/65328278/   -  person Ken Tsoi    schedule 16.12.2020


Ответы (2)


С помощью решения сродства между капсулами, предложенного Чином, я смог решить проблему:

Вот мой Deployment yaml файл:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-go
  namespace: stage
  labels:
    app: test-go
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-go
  template:
    metadata:
      labels:
        app: test-go
        service: git
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: service
                operator: In
                values:
                - git
            topologyKey: kubernetes.io/hostname
      containers:
      - name: test-go
        image: registry.gitlab.com/xxxxxxx/test-go
      imagePullSecrets:
        - name: registry-pull-secret

В файле Deployment yaml установите метку в шаблоне модуля spec.template.metadata.labels, а затем добавьте podAffinity config на основе добавленной метки, установите topologyKey в kubernetes.io/hostname, чтобы модули были развернуты на одном узле.

person Ken Tsoi    schedule 17.12.2020

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

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

Узнайте больше о Как модули управления несколькими контейнерами

person Matt    schedule 16.12.2020
comment
Спасибо @matt за ввод, это звучит разумно и может быть одним из вариантов. Но сначала я попробую сродство между капсулами - person Ken Tsoi; 16.12.2020
comment
Конечно, просто хотел охватить все варианты: D - person Matt; 16.12.2020
comment
На самом деле развернуть три разных контейнера в разных проектах вместе в модуле будет непросто, я не придумал способ обработки CI и сценария развертывания. - person Ken Tsoi; 16.12.2020