Введение
В этой серии статей мы шаг за шагом рассмотрим процесс создания диаграммы 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
вывод должен быть примерно таким:
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 здесь.
Большое спасибо за прочтение! Надеюсь увидеть вас в третьей части!