Настройте RBAC в Kubernetes для запуска Cronjob kubectl - PullRequest
0 голосов
/ 09 октября 2019
➜  ~ kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:13:54Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.10", GitCommit:"e3c134023df5dea457638b614ee17ef234dc34a6", GitTreeState:"clean", BuildDate:"2019-07-08T03:40:54Z", GoVersion:"go1.10.8", Compiler:"gc", Platform:"linux/amd64"}

Я пытаюсь запустить kubectl из Cronjob, чтобы изменить количество модулей в развертывании.

Я создал Cronjob и его роль следующим образом, следуя советам в https://stackoverflow.com/a/54908449/3477266

apiVersion: v1
kind: ServiceAccount
metadata:
  name: scheduled-autoscaler-service-account
  namespace: default

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: scheduler-autoscaler-role
rules:
- apiGroups:
  - extensions
  - apps
  resources:
  - deployments
  verbs:
  - patch
  - get
  - list

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: schedule-autoscaler-role-binding
subjects:
- kind: ServiceAccount
  name: scheduled-autoscaler-service-account
  namespace: default
roleRef:
  kind: Role
  name: schedule-autoscaler-role
  apiGroup: ""

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: adwords-api-scale-up-cron-job
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
    spec:
      activeDeadlineSeconds: 100
      template:
        spec:
          serviceAccountName: scheduled-autoscaler-service-account
          containers:
          - name: adwords-api-scale-up-container
            image: bitnami/kubectl:1.15-debian-9
            command:
              - bash
            args:
              - "-xc"
              - |
                kubectl scale --replicas=2 --v=7 
deployment/adwords-api-deployment
          restartPolicy: OnFailure

Однако я получаю следующую ошибку в модулях, выполняющих это задание:

Ошибка сервера (запрещено): deployments.extensions "adwords-api-deploy"запрещено: Пользователь "system: serviceaccount: по умолчанию: schedule-autoscaler-service-account" не может получить ресурс "развертывания" в группе API "расширения" в пространстве имен "default"

Как можно отладитьв чем проблема? Мне кажется, я дал все разрешения, на которые он жалуется в сообщении, но он все еще не работает.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Возможно, вам придется предоставить kubectl двоичный файл в соответствующем шаблоне Job с конкретным kubeconfig файлом из исходного k8sхост-компьютер кластера, чтобы установить соединение с целевым кластером k8s из соответствующего модуля Pod, определяя достаточную информацию о кластере, аутентификация и авторизация механизмы.

Я применил некоторые корректировки к исходной конфигурации CronJob, сумев добавить hostPath монтирование тома, отображение исходного хоста k8s kubeconfig путь: $HOME/.kube под каждымМодуль, выпущенный заданием:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: adwords-api-scale-up-cron-job
spec:
  schedule: "*/2 * * * *"
  jobTemplate:
    spec:
      activeDeadlineSeconds: 100
      template:
        spec:
          serviceAccountName: scheduled-autoscaler-service-account
          containers:
          - name: adwords-api-scale-up-container
            image: bitnami/kubectl:1.15-debian-9
            command:
              - bash
            args:
              - "-xc"
              - |
                kubectl scale --replicas=2 --v=7 deployment/adwords-api-deployment
            volumeMounts:
            - name: kubectl-config
              mountPath: /.kube/
              readOnly: true
          volumes:
          - name: kubectl-config
            hostPath:
              path: $HOME/.kube # Replace $HOME with an evident path location
          restartPolicy: OnFailure

Я проверил RBAC правил, которые вы предоставили, и они в порядке, тем временем воспроизводя вашу проблему в аналогичном сценарии в моей среде.

0 голосов
/ 09 октября 2019

Не думаю, что вы можете оставить apiGroup пустым в переплете. Попробуйте apiGroup: rbac.authorization.k8s.io?

...