Настройки привязки модулей не работают должным образом в моем развертывании

#kubernetes #kubernetes-pod #affinity

Вопрос:

Я пытаюсь развернуть 2 реплики на k3s — каждая на другом узле. Согласно документации, это должно быть довольно просто. Однако, должно быть, я совершаю какую-то глупую ошибку, которую не могу найти. Когда я применяю файл развертывания, оба моих модуля работают на одном и том же узле (node1). В случае, если я выключу этот узел, эти модули запустятся на других 2 узлах (node2, node3). Когда я запускаю node1 обратно и повторно развертываю приложение, оно снова запускается на том же node1. Если кто-нибудь может посоветовать, пожалуйста, что у меня не так в моей конфигурации, я был бы очень благодарен. (Я запускаю свежие новые k3 на 3 серверах с одинаковой конфигурацией HW)

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: tbd-node-js-runner
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tbd-node-js-runner
  template:
    metadata:
      labels:
        app: tbd-node-js-runner
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - tbd-node-js-runner
            topologyKey: topology.kubernetes.io/hostname
      containers:
        - name: tbd-node-js-runner
          image: tabidoo/nodejs-runner:latest
          ports:
          - containerPort: 
          env:
          - name: CONNECTION_STRING
            value: "..."
            ...
          imagePullPolicy: Always
      imagePullSecrets:
        - name: regcred
 

Комментарии:

1. можете ли вы добавить kubectl get nodes --show-labels вывод к вопросу ?

Ответ №1:

  • Это связано с неправильной топологией , она должна быть ‘kubernetes.io/hostname» нет «topology.kubernetes.io/hostname» .
  • Таким образом, это будет выглядеть следующим образом :
 apiVersion: apps/v1
kind: Deployment
metadata:
  name: tbd-node-js-runner
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tbd-node-js-runner
  template:
    metadata:
      labels:
        app: tbd-node-js-runner
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - tbd-node-js-runner
            topologyKey: "kubernetes.io/hostname"
      containers:
        - name: tbd-node-js-runner
          image: tabidoo/nodejs-runner:latest
 

Комментарии:

1. ДА. Это оно. Спасибо! Большое спасибо. Я не верю, что пропустил это. Я читал это так много раз.

2. @MichalCumpelik вы можете принять ответ, если он вас полностью удовлетворит

3. Да, я не находил его раньше. Теперь, я надеюсь, это принято. Спасибо за уведомление.