Сходство С Kubernetes Не Позволяет Работникам Дженкинса Работать На Основном

#jenkins #kubernetes #amazon-eks

Вопрос:

Дженкинс работает на EKS, и существуют правила сходства как для основного, так и для рабочего модулей Дженкинса.

Идея состоит в том, чтобы предотвратить запуск рабочих модулей Jenkins на тех же рабочих узлах EKS, где работает основной модуль Jenkins.

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

Существуют ли правила сродства / анти-сродства, чтобы этого не произошло?

Правила, действующие для Дженкинса Мейна:

 affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions: # assign to eks apps worker group
            - key: node.app/group
              operator: In
              values:
                - apps
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions: # don't assign to a node running jenkins main
          - key: app.kubernetes.io/name
            operator: In
            values:
              - jenkins
          - key: app.kubernetes.io/component
            operator: In
            values:
              - main
        topologyKey: kubernetes.io/hostname
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions: # try not to assign to a node already running a jenkins worker
              - key: app.kubernetes.io/name
                operator: In
                values:
                  - jenkins
              - key: app.kubernetes.io/component
                operator: In
                values:
                  - worker
          topologyKey: kubernetes.io/hostname
 

Правила, действующие для работника Дженкинса:

 affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions: # assign to eks apps worker group
          - key:  node.app/group
            operator: In
            values:
              - apps
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions: # don't assign to a node running jenkins main
          - key: app.kubernetes.io/name
            operator: In
            values:
              - jenkins
          - key: app.kubernetes.io/component
            operator: In
            values:
              - main
        topologyKey: kubernetes.io/hostname
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions: # try not to assign to a node already running a jenkins worker
              - key: app.kubernetes.io/name
                operator: In
                values:
                  - jenkins
              - key: app.kubernetes.io/component
                operator: In
                values:
                  - worker
          topologyKey: kubernetes.io/hostname
 

Ответ №1:

Так низко, и вот, угадайте, что…основные метки модулей были установлены неправильно.

Теперь вы можете увидеть ярлыки селектора, отображаемые здесь:

 > aws-vault exec nonlive-build -- kubectl get po -n cicd --show-labels
NAME                                  READY   STATUS    RESTARTS   AGE    LABELS
jenkins-6597db4979-khxls              2/2     Running   0          4m8s   app.kubernetes.io/component=main,app.kubernetes.io/instance=jenkins
 

Для достижения этой цели в файл значений были добавлены новые записи:

 main:
  metadata:
    labels:
      app.kubernetes.io/name: jenkins
      app.kubernetes.io/component: main
 

И шаблон Helm _helpers.tpl был соответствующим образом обновлен:

 {{- define "jenkins.selectorLabels" -}}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- if .Values.main.metadata.labels }}
{{- range $k, $v := .Values.main.metadata.labels }}
{{ $k }}: {{ $v }}
{{- end }}
{{- end }}
{{- end }}