Учебник по HULL 02: Настройка рулевой диаграммы на основе HULL


Введение

В этой серии статей мы шаг за шагом рассмотрим процесс создания диаграммы Helm на основе библиотеки HULL. Для сравнения с традиционным процессом создания диаграмм Helm и в образовательных целях цель состоит в том, чтобы переписать диаграмму Helm kubernetes-dashboard в ее последней версии, существующей на момент написания статьи (это версия 5.2.0).

Вы можете спросить, почему kubernetes-dashboard Helm chart? По ряду причин это интересная тема для данного руководства:

  • диаграмма Helm kubernetes-dashboard, скорее всего, является одной из наиболее часто загружаемых и используемых диаграмм Helm по всему миру. Многие люди взаимодействуют с ним ежедневно и могут иметь более глубокое понимание его структуры
  • он имеет среднюю сложность, что делает задачу перевода его в график на основе HULL, с одной стороны, способной продемонстрировать реальную применимость библиотеки HULL для создания графика Helm, а с другой – выполнимой при разумных усилиях.
  • И наконец, глубокое погружение в столь часто используемую диаграмму Helm все еще может предложить вам интересные идеи, если вы новичок в понимании механики диаграмм Helm или хотите лучше изучить конкретную архитектуру диаграмм kubernetes-dashboard.

Получение Helm

Прежде чем приступить к работе, вам нужно убедиться, что у вас установлена свежая версия Helm. Затем откройте терминал Linux по вашему выбору и при вводе:

helm version
Enter fullscreen mode Выйти из полноэкранного режима

вывод должен быть примерно таким:

version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь вы готовы к работе!

Создание тестового проекта

Сначала перейдите в рабочий каталог, например, home:

cd ~
Войдите в полноэкранный режим Выйти из полноэкранного режима

и там создайте каталог для нашего проекта и первой части учебника и перейдите в него:

mkdir kubernetes-dashboard-hull && mkdir kubernetes-dashboard-hull/02_setup && cd kubernetes-dashboard-hull/02_setup
Войти в полноэкранный режим Выйти из полноэкранного режима

Получение оригинальной диаграммы kubernetes-dashboard

Для справки и анализа вы можете скачать копию оригинальной диаграммы kubernetes-dashboard helm и извлечь ее следующим образом:

curl -L https://kubernetes.github.io/dashboard/kubernetes-dashboard-5.2.0.tgz -o kubernetes-dashboard.tgz && tar -xvzf kubernetes-dashboard.tgz -C . && rm kubernetes-dashboard.tgz
Войти в полноэкранный режим Выйти из полноэкранного режима

Для проверки успешности извлечения перечислите папку kubernetes-dashboard:

ls -R kubernetes-dashboard
Войти в полноэкранный режим Выйти из полноэкранного режима

и вы должны увидеть все извлеченные файлы:

kubernetes-dashboard:
Chart.lock  Chart.yaml  README.md  charts  templates  values.yaml

kubernetes-dashboard/charts:
metrics-server

kubernetes-dashboard/charts/metrics-server:
Chart.yaml  README.md  ci  templates  values.yaml

kubernetes-dashboard/charts/metrics-server/ci:
ci-values.yaml

kubernetes-dashboard/charts/metrics-server/templates:
NOTES.txt     apiservice.yaml                     clusterrole.yaml                        clusterrolebinding.yaml  pdb.yaml  rolebinding.yaml  serviceaccount.yaml
_helpers.tpl  clusterrole-aggregated-reader.yaml  clusterrolebinding-auth-delegator.yaml  deployment.yaml          psp.yaml  service.yaml

kubernetes-dashboard/templates:
NOTES.txt       clusterrole-metrics.yaml         clusterrolebinding-readonly.yaml  ingress.yaml        psp.yaml          secret.yaml          servicemonitor.yaml
_helpers.tpl    clusterrole-readonly.yaml        configmap.yaml                    networkpolicy.yaml  role.yaml         service.yaml
_tplvalues.tpl  clusterrolebinding-metrics.yaml  deployment.yaml                   pdb.yaml            rolebinding.yaml  serviceaccount.yaml
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Настройка графика HULL

Хорошо, теперь приступим к созданию новой пустой диаграммы HULL на основе Helm. Шаги задокументированы здесь, но вы создадите его с нуля, чтобы понять, что нужно.

Один из способов начать – использовать команду helm create для создания структуры папок для пустой диаграммы Helm. Выполните эту команду, чтобы создать наш график Helm kubernetes-dashboard-hull:

helm create kubernetes-dashboard-hull
Войдите в полноэкранный режим Выйти из полноэкранного режима

должен получиться такой ответ:

Creating kubernetes-dashboard-hull
Войти в полноэкранный режим Выйти из полноэкранного режима

Это должно было создать папку kubernetes-dashboard-hull с обычными необходимыми и примерными файлами диаграмм Helm в ней. Перейдите в эту папку и просмотрите содержимое:

cd kubernetes-dashboard-hull && ls -R
Войдите в полноэкранный режим Выйти из полноэкранного режима

чтобы найти файлы по умолчанию для новой диаграммы Helm:

.:
Chart.yaml  charts  templates  values.yaml

./charts:

./templates:
NOTES.txt  _helpers.tpl  deployment.yaml  hpa.yaml  ingress.yaml  service.yaml  serviceaccount.yaml  tests

./templates/tests:
test-connection.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

Удалить примеры и тесты в папке /templates, кроме hull.yaml ничего не нужно:

rm -rf templates/* && ls -R
Войти в полноэкранный режим Выйти из полноэкранного режима

показывает следующее:

.:
Chart.yaml  charts  templates  values.yaml

./charts:

./templates:
Войти в полноэкранный режим Выйти из полноэкранного режима

Дополнительно опустошите values.yaml с данными примера:

echo '' > values.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь отредактируйте обязательный Chart.yaml, который обновлен для отражения исходной информации о графиках. Кроме того, добавьте библиотеку HULL в качестве требования, которое необходимо для использования HULL.

Выбор версии HULL

При выборе версии HULL рекомендуется, чтобы версия HULL major.minor как минимум совпадала с полем kubeVersion, иначе версия API объектов, создаваемых HULL, может быть еще неизвестна версии API кластеров. Каждая ветка релиза HULL соответствует определенной версии Kubernetes, например 1.21, 1.22, 1.23 и так далее. Объекты, которые HULL выводит на экран, всегда будут соответствовать последней версии API данного типа объекта, которая соответствует версии библиотеки HULL. Поэтому, когда API обновляется с beta до stable при скачке версии Kubernetes, последняя версия HULL будет создавать объекты со стабильной версией API, а первая – объекты с версией API beta. Рекомендуется оставить значение kubeVersion в 1.21.0 для этого примера, чтобы вы могли работать с любым кластером Kubernetes с версией 1.21.0 или выше.

Замените 1.23.3 ниже на последнюю доступную версию HULL и соответственно подберите kubeVersion:

echo 'apiVersion: v2
appVersion: 2.5.0
dependencies:
- condition: metrics-server.enabled
  name: metrics-server
  repository: https://kubernetes-sigs.github.io/metrics-server/
  version: 3.5.0
- name: hull
  version: "1.23.3"
  repository: "https://vidispine.github.io/hull"
description: General-purpose web UI for Kubernetes clusters
home: https://github.com/kubernetes/dashboard
icon: https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.svg
keywords:
- kubernetes
- dashboard
kubeVersion: ">=1.21.0-0"
maintainers:
- email: cdesaintmartin@wiremind.fr
  name: desaintmartin
name: kubernetes-dashboard
sources:
- https://github.com/kubernetes/dashboard
version: 5.2.0' > Chart.yaml
Вход в полноэкранный режим Выйти из полноэкранного режима

Перед началом работы над values.yaml необходимо загрузить библиотеку HULL способом обновления зависимостей Chart, используемым Helm:

helm dependency update
Войти в полноэкранный режим Выйти из полноэкранного режима

для загрузки диаграммы HULL из репозитория HelmChart на GitHub и другой поддиаграммы metrics-server, которую вы можете опционально совместно развернуть:

Getting updates for unmanaged Helm repositories...
...Successfully got an update from the "https://kubernetes-sigs.github.io/metrics-server/" chart repository
...Successfully got an update from the "https://vidispine.github.io/hull" chart repository
Saving 2 charts
Downloading metrics-server from repo https://kubernetes-sigs.github.io/metrics-server/
Downloading hull from repo https://vidispine.github.io/hull
Deleting outdated charts
Войти в полноэкранный режим Выход из полноэкранного режима

Отлично, осталась одна маленькая вещь, прежде чем вы сможете начать определять объекты нашего kubernetes-dashboard-hull чарта: скопируйте hull.yaml из теперь локально загруженного субчарта в основную папку шаблонов charts. Без этого шага ничего не сможет быть отрисовано через HULL, поскольку hull.yaml содержит логику для преобразования определений объектов values.yaml в отрисованные YAML файлы. Мы можем сделать это одним движком, извлекая упакованный файл HULL tgz из каталога /charts в локальный каталог temp, копируя hull.yaml и очищая каталог temp после этого:

mkdir _tmp && tar -xvzf charts/hull-1.23.3.tgz -C _tmp && cp _tmp/hull/hull.yaml templates/hull.yaml && rm -rf _tmp
Вход в полноэкранный режим Выход из полноэкранного режима

распечатать временно извлеченные файлы:

hull/Chart.yaml
hull/Chart.lock
hull/values.yaml
hull/values.schema.json
hull/templates/_metadata.tpl
hull/templates/_metadata_annotations.tpl
hull/templates/_metadata_chartref.tpl
hull/templates/_metadata_fullname.tpl
hull/templates/_metadata_header.tpl
hull/templates/_metadata_labels.tpl
hull/templates/_metadata_name.tpl
hull/templates/_objects.tpl
hull/templates/_objects_base_plain.tpl
hull/templates/_objects_base_pod.tpl
hull/templates/_objects_base_rbac.tpl
hull/templates/_objects_base_role.tpl
hull/templates/_objects_base_spec.tpl
hull/templates/_objects_base_webhook.tpl
hull/templates/_objects_configmap.tpl
hull/templates/_objects_cronjob.tpl
hull/templates/_objects_horizontalpodautoscaler.tpl
hull/templates/_objects_ingress.tpl
hull/templates/_objects_pod.tpl
hull/templates/_objects_pod_container.tpl
hull/templates/_objects_pod_volume.tpl
hull/templates/_objects_registry.tpl
hull/templates/_objects_secret.tpl
hull/templates/_objects_service.tpl
hull/templates/_util.tpl
hull/templates/_util_transformations.tpl
hull/.helmignore
hull/CHANGELOG.md
hull/LICENSE
hull/README.md
hull/doc/architecture.md
hull/doc/development.md
hull/doc/json_schema_validation.md
hull/doc/objects_base.md
hull/doc/objects_configmaps_secrets.md
hull/doc/objects_customresource.md
hull/doc/objects_horizontalpodautoscaler.md
hull/doc/objects_ingress.md
hull/doc/objects_pod.md
hull/doc/objects_registry.md
hull/doc/objects_role.md
hull/doc/objects_service.md
hull/doc/objects_webhook.md
hull/doc/setup.md
hull/doc/transformations.md
hull/files/examples/authservice_values.yaml
hull/files/examples/medialogger_values.yaml
hull/files/scripts/HullChart.ps1
hull/files/scripts/SetChartVersion.ps1
hull/files/scripts/SetYamlValues.ps1
hull/files/templates/hull-clusterrole.yaml
hull/files/templates/hull-clusterrolebinding.yaml
hull/files/templates/hull-configmap.yaml
hull/files/templates/hull-cronjob.yaml
hull/files/templates/hull-customresource.yaml
hull/files/templates/hull-daemonset.yaml
hull/files/templates/hull-deployment.yaml
hull/files/templates/hull-endpoints.yaml
hull/files/templates/hull-horizontalpodautoscaler.yaml
hull/files/templates/hull-ingress.yaml
hull/files/templates/hull-ingressclass.yaml
hull/files/templates/hull-job.yaml
hull/files/templates/hull-mutatingwebhookconfiguration.yaml
hull/files/templates/hull-networkpolicy.yaml
hull/files/templates/hull-persistentvolume.yaml
hull/files/templates/hull-persistentvolumeclaim.yaml
hull/files/templates/hull-poddisruptionbudget.yaml
hull/files/templates/hull-podsecuritypolicy.yaml
hull/files/templates/hull-priorityclass.yaml
hull/files/templates/hull-registry.yaml
hull/files/templates/hull-resourcequota.yaml
hull/files/templates/hull-role.yaml
hull/files/templates/hull-rolebinding.yaml
hull/files/templates/hull-secret.yaml
hull/files/templates/hull-service.yaml
hull/files/templates/hull-serviceaccount.yaml
hull/files/templates/hull-servicemonitor.yaml
hull/files/templates/hull-statefulset.yaml
hull/files/templates/hull-storageclass.yaml
hull/files/templates/hull-validatingwebhookconfiguration.yaml
hull/hull.yaml
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь проверьте, правильно ли был скопирован hull.yaml в папку templates:

cat templates/hull.yaml
Войдите в полноэкранный режим Выйти из полноэкранного режима

должно вернуться:

{{- include "hull.objects.prepare.all" (dict "HULL_ROOT_KEY" "hull" "ROOT_CONTEXT" $) }}
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверка настроек RBAC по умолчанию

Фантастика, все на месте! Если до этого момента все шло правильно, вы можете взглянуть на то, что HULL делает по умолчанию в ненастроенном графике Helm. Для этого вы можете попросить Helm вывести YAML-файлы в stdout, где вы сможете изучить их вместо прямого развертывания объектов на кластере. helm template – это команда, используемая для такого рендеринга. Если у вас возникла ошибка, жалующаяся на несовместимость версий, вам нужно обновить установку Helm так, чтобы helm template запускался с новой версией API.

Продолжаем, создавая шаблон из того, что мы имеем в нашей “пустой” диаграмме на данный момент:

helm template .
Войти в полноэкранный режим Выход из полноэкранного режима

давая нам неожиданное количество объектов:

---
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: release-name-metrics-server
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/clusterrole-aggregated-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:metrics-server-aggregated-reader
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
  - apiGroups:
      - metrics.k8s.io
    resources:
      - pods
      - nodes
    verbs:
      - get
      - list
      - watch
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:release-name-metrics-server
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
rules:
  - apiGroups:
    - ""
    resources:
      - pods
      - nodes
      - nodes/stats
      - namespaces
      - configmaps
    verbs:
      - get
      - list
      - watch
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/clusterrolebinding-auth-delegator.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: release-name-metrics-server:system:auth-delegator
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
  - kind: ServiceAccount
    name: release-name-metrics-server
    namespace: default
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: system:release-name-metrics-server
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:release-name-metrics-server
subjects:
  - kind: ServiceAccount
    name: release-name-metrics-server
    namespace: default
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
rules: []
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: release-name-metrics-server-auth-reader
  namespace: kube-system
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
  - kind: ServiceAccount
    name: release-name-metrics-server
    namespace: default
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: release-name-kubernetes-dashboard-default
subjects:
- kind: ServiceAccount
  name: release-name-kubernetes-dashboard-default
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: release-name-metrics-server
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
spec:
  type: ClusterIP
  ports:
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name-metrics-server
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: metrics-server
      app.kubernetes.io/instance: release-name
  template:
    metadata:
      labels:
        app.kubernetes.io/name: metrics-server
        app.kubernetes.io/instance: release-name
    spec:
      serviceAccountName: release-name-metrics-server
      priorityClassName: "system-cluster-critical"
      containers:
        - name: metrics-server
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            runAsUser: 1000
          image: k8s.gcr.io/metrics-server/metrics-server:v0.5.0
          imagePullPolicy: IfNotPresent
          args:
            - --cert-dir=/tmp
            - --secure-port=4443
            - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
            - --kubelet-use-node-status-port
            - --metric-resolution=15s
          ports:
          - name: https
            protocol: TCP
            containerPort: 4443
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /livez
              port: https
              scheme: HTTPS
            initialDelaySeconds: 0
            periodSeconds: 10
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /readyz
              port: https
              scheme: HTTPS
            initialDelaySeconds: 20
            periodSeconds: 10
          volumeMounts:
            - name: tmp
              mountPath: /tmp
      volumes:
        - name: tmp
          emptyDir: {}
---
# Source: kubernetes-dashboard/charts/metrics-server/templates/apiservice.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: v1beta1.metrics.k8s.io
  labels:
    helm.sh/chart: metrics-server-3.5.0
    app.kubernetes.io/name: metrics-server
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "0.5.0"
    app.kubernetes.io/managed-by: Helm
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: release-name-metrics-server
    namespace: default
  version: v1beta1
  versionPriority: 100
Войти в полноэкранный режим Выход из полноэкранного режима

Хм, довольно много объектов. Это потому, что команда шаблонирования отобразила как объекты RBAC по умолчанию HULL, так и объекты по умолчанию подсхемы metrics-server. Поскольку мы не включили развертывание подсхемы metrics-server в явном виде, это можно считать ошибкой Helm, однако давайте просто отключим развертывание диаграммы metrics-server для этого руководства, набрав:

echo 'metrics-server:
  enabled: false' > values.yaml
Войти в полноэкранный режим Выйти из полноэкранного режима

Редактирование values.yaml имеет прямое влияние на вывод того, что развертывание поддиаграммы metrics-server отключено. Теперь вывод helm template . должен содержать только объекты HULL, которые создаются по умолчанию.

Вы можете убедиться в этом, выполнив повторный ввод:

helm template .
Войти в полноэкранный режим Выход из полноэкранного режима
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
rules: []
---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: release-name-kubernetes-dashboard-default
subjects:
- kind: ServiceAccount
  name: release-name-kubernetes-dashboard-default
Войти в полноэкранный режим Выйти из полноэкранного режима

Из этого результата можно многое понять. Вы можете спросить: почему уже созданы объекты, в то время как я еще ничего не определил? Это потому, что по умолчанию HULL выводит набор объектов RBAC “по умолчанию”, который вы можете использовать и настраивать для своего приложения. Автоматически создаются следующие объекты:

  • стандартный ServiceAccount с именем <release-name>-<chart-name>-default, который предварительно настроен для всех pods как serviceAccountName для использования
  • роль по умолчанию с именем <release-name>-<chart-name>-default, которая изначально не имеет правил, но вы можете легко добавить их по мере необходимости
  • стандартная привязка RoleBinding с именем <release-name>-<chart-name>-default, которая связывает <release-name>-<chart-name>-default роль с <release-name>-<chart-name>-default ServiceAccount.

Это похоже на RBAC bootstraping, на который вы можете легко опираться – но у вас могут быть разные потребности, поэтому если эта настройка не подходит для вашего случая, вы можете отключить этот набор RBAC объектов по умолчанию и указать другие RBAC объекты, более приспособленные к вашим потребностям. Исследование вариантов конфигурации RBAC является темой одного из следующих уроков этой серии.

Однако, хотя использование RBAC является стандартным в HULL, вы также можете по желанию отключить отображение объектов RBAC, если вы этого хотите (конечно, это не рекомендуется 🙂 ). HULL предлагает следующий глобальный переключатель диаграммы для отказа от RBAC, и если false, то объекты, связанные с RBAC, больше не будут отображаться:

hull:
  config:
    general:
      rbac: false
Войти в полноэкранный режим Выйти из полноэкранного режима

Проверка автогенерируемых метаданных

Еще один выделяющийся аспект здесь – это автогенерируемые метаданные для всех объектов, которые соответствуют лучшим практикам определения метаданных Kubernetes и рекомендациям Helm по этому вопросу. Используя HULL, вы получаете эти метаданные по умолчанию, созданные без необходимости делать что-либо, и в дополнение к этому легко обогатить метаданными все объекты, объекты определенного типа или просто отдельные объекты, что также рассматривается в оставшейся части этого руководства. 

Например, посмотрите на блок metadata для ServiceAccount, который был отображен:

---
# Source: kubernetes-dashboard/templates/hull.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations: {}
  labels:
    app.kubernetes.io/component: default
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: kubernetes-dashboard
    app.kubernetes.io/part-of: undefined
    app.kubernetes.io/version: 2.5.0
    helm.sh/chart: kubernetes-dashboard-5.2.0
  name: release-name-kubernetes-dashboard-default
Вход в полноэкранный режим Выход из полноэкранного режима

Автогенерация стандартных метаданных и возможность определения наследуемых метаданных – это удобная функция, которая обеспечивает единообразие объектов и тем самым упрощает операции над ними.

Подведение итогов

На этом часть 2 закончена, в части 3 мы рассмотрим ConfigMaps и Secrets, и вы добавите свои первые пользовательские объекты на диаграмму kubernetes-dashboard-hull Helm! Вы можете ознакомиться с полным кодом, созданным к настоящему моменту в результате этой части 2 здесь.

Большое спасибо за прочтение! Надеюсь увидеть вас в третьей части!

Оцените статью
Procodings.ru
Добавить комментарий