From cb2f362822151de51b0f9b0aa1009ccd8a43d138 Mon Sep 17 00:00:00 2001 From: Ilya Lesikov Date: Wed, 5 Jun 2024 11:50:32 +0300 Subject: [PATCH] docs(configurator): update Getting Started for Kubernetes Signed-off-by: Ilya Lesikov --- .../gitlab_kubernetes_main_section.md.liquid | 151 ++++++++++---- .../linux/buildah/infra.md.liquid | 178 ++++++++++++----- .../linux/buildah/infra.md.liquid | 93 ++++++--- .../gitlab_kubernetes_main_section.md.liquid | 157 +++++++++++---- .../linux/buildah/infra.md.liquid | 187 +++++++++++++----- .../linux/buildah/infra.md.liquid | 102 ++++++---- 6 files changed, 626 insertions(+), 242 deletions(-) diff --git a/bin/configurator/static/_includes/en/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid b/bin/configurator/static/_includes/en/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid index 7a274d7ce..6717b07e3 100644 --- a/bin/configurator/static/_includes/en/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid +++ b/bin/configurator/static/_includes/en/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid @@ -2,72 +2,126 @@ - GitLab; -- Kubernetes to run the GitLab Runner. +- Kubernetes to run GitLab Kubernetes Executor. -### Installing and registering the GitLab Runner +### Install GitLab Runner -Follow [official instructions](https://docs.gitlab.com/runner/register/index.html) to install the GitLab Runner in Kubernetes and registering it. +Follow [official instructions](https://docs.gitlab.com/runner/install/) to install and register the GitLab Runner. If you are going to install your GitLab Runner in Kubernetes, then install it to `gitlab-ci` namespace. -### Configuring the GitLab Runner +### Basic GitLab Runner configuration (no caching) -Modify the configuration of the registered GitLab Runner by adding the following parameters to its `config.toml`: +Add the following to the GitLab Runner configuration file `config.toml`: ```toml [[runners]] - name = "" + environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true"] + [runners.kubernetes] namespace = "gitlab-ci" + [runners.kubernetes.pod_annotations] "container.apparmor.security.beta.kubernetes.io/build" = "unconfined" + [runners.kubernetes.pod_security_context] run_as_non_root = true run_as_user = 1000 run_as_group = 1000 fs_group = 1000 -``` - -Add the following parameters to enable `.werf` and `/builds` caching (recommended): -```toml -[[runners]] - name = "" - [runners.kubernetes] - [[runners.kubernetes.volumes.pvc]] + [[runners.kubernetes.volumes.empty_dir]] name = "gitlab-ci-kubernetes-executor-werf-cache" mount_path = "/home/build/.werf" - [[runners.kubernetes.volumes.pvc]] + + [[runners.kubernetes.volumes.empty_dir]] name = "gitlab-ci-kubernetes-executor-builds-cache" mount_path = "/builds" + + [[runners.kubernetes.volumes.empty_dir]] + name = "gitlab-ci-kubernetes-executor-helper-home" + mount_path = "/home/helper" + + [[runners.kubernetes.pod_spec]] + name = "fix helper HOME" + patch = ''' + containers: + - name: helper + env: + - name: HOME + value: /home/helper + ''' + patch_type = "strategic" ``` -... or these if caching is not needed: +### Basic Gitlab Runner Configuration (with caching using Persistent Volumes) + +Add the following to the GitLab Runner configuration file `config.toml`: ```toml [[runners]] - name = "" + environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true"] + [runners.kubernetes] - [[runners.kubernetes.volumes.empty_dir]] + namespace = "gitlab-ci" + + [runners.kubernetes.pod_annotations] + "container.apparmor.security.beta.kubernetes.io/build" = "unconfined" + + [runners.kubernetes.pod_security_context] + run_as_non_root = true + run_as_user = 1000 + run_as_group = 1000 + fs_group = 1000 + + [[runners.kubernetes.volumes.pvc]] name = "gitlab-ci-kubernetes-executor-werf-cache" mount_path = "/home/build/.werf" - [[runners.kubernetes.volumes.empty_dir]] + + [[runners.kubernetes.volumes.pvc]] name = "gitlab-ci-kubernetes-executor-builds-cache" mount_path = "/builds" -``` -Add one more parameter if you are going to deploy applications using werf to the same cluster in which the GitLab Runner is running: - -```toml -[[runners]] - name = "" - [runners.kubernetes] - service_account = "gitlab-ci-kubernetes-executor" -``` + [[runners.kubernetes.volumes.pvc]] + name = "gitlab-ci-kubernetes-executor-helper-home" + mount_path = "/home/helper" -You may want to perform [additional configuration](https://docs.gitlab.com/runner/configuration/advanced-configuration.html) of the GitLab Runner as well. + [[runners.kubernetes.pod_spec]] + name = "fix helper HOME" + patch = ''' + containers: + - name: helper + env: + - name: HOME + value: /home/helper + ''' + patch_type = "strategic" -### Configuring Kubernetes + [[runners.kubernetes.pod_spec]] + name = "fix volumes permissions" + patch = ''' + initContainers: + - name: fix-volumes-permissions + image: alpine + command: + - sh + - -ec + - | + chown :$(id -g) /home/build/.werf /builds /home/helper + chmod g+rwx /home/build/.werf /builds /home/helper + securityContext: + runAsUser: 0 + runAsNonRoot: false + volumeMounts: + - mountPath: /home/build/.werf + name: gitlab-ci-kubernetes-executor-werf-cache + - mountPath: /builds + name: gitlab-ci-kubernetes-executor-builds-cache + - mountPath: /home/helper + name: gitlab-ci-kubernetes-executor-helper-home + ''' + patch_type = "strategic" +``` -If you enabled caching of `.werf` and `/builds` in the GitLab Runner configuration, create appropriate PersistentVolumeClaims in the cluster, for example: +Create PVCs: ```shell kubectl create -f - < For greater security, consider creating a more restricted ClusterRole/Role and using it instead of the `cluster-admin` cluster role above. -If the Kubernetes nodes on which the GitLab Runner is hosted run with a Linux kernel version 5.12 or lower, then enable FUSE for GitLab Runner on that cluster using the following command: +Now add this line to the GitLab Runner configuration file `config.toml`: + +```toml +[[runners]] + [runners.kubernetes] + service_account = "gitlab-ci-kubernetes-executor" +``` + +### Allow FUSE (for Kubernetes Nodes with Linux kernel older than 5.13) + +If the Kubernetes Nodes on which you are going to run Kubernetes Executor Pods have Linux kernel version older than 5.13, then you need to allow FUSE: ```shell kubectl create -f - < For greater security, consider creating a more restricted ClusterRole/Role and using it instead of the `cluster-admin` cluster role above. -If the Kubernetes nodes on which the GitLab Runner is hosted are running Linux kernel 5.12 or lower, enable FUSE for the GitLab Runner on that cluster using the following command: +Now add this line to the GitLab Runner configuration file `config.toml`: + +```toml +[[runners]] + [runners.kubernetes] + service_account = "gitlab-ci-kubernetes-executor" +``` + +### Allow FUSE (for Kubernetes Nodes with Linux kernel older than 5.13) + +If the Kubernetes Nodes on which you are going to run Kubernetes Executor Pods have Linux kernel version older than 5.13, then you need to allow FUSE: ```shell -$ kubectl create -f - < This step is only needed to build images for platforms other than the host platform on which werf is being run. +{% include configurator/partials/ci/cross_platform_note.md.liquid %} Register emulators on your Kubernetes nodes using qemu-user-static: -```yaml +```shell +kubectl create -f - < For greater security, consider creating a more restricted ClusterRole/Role and using it instead of the `cluster-admin` cluster role above. -If the Kubernetes nodes on which the Kubernetes Runner is hosted have Linux kernel version 5.12 or lower, enable FUSE for the Kubernetes Runner on that cluster using the following command: +Now add this line to Pod spawned by your Runner: + +```yaml +spec: + serviceAccountName: ci-kubernetes-runner +``` + +### Allow FUSE (for Kubernetes Nodes with Linux kernel older than 5.13) + +If the Kubernetes Nodes on which you are going to run Runner Pods have Linux kernel version older than 5.13, then you need to allow FUSE: ```shell kubectl create -f - < This step only needed to build images for platforms other than host platform running werf. @@ -170,6 +193,7 @@ apiVersion: apps/v1 kind: DaemonSet metadata: name: qemu-user-static + namespace: ci labels: app: qemu-user-static spec: @@ -199,3 +223,8 @@ spec: memory: 50Mi EOF ``` + +### Configuring the container registry + +[Enable garbage collection]({{ "/docs/v2/usage/cleanup/cr_cleanup.html#container-registrys-garbage-collector" | relative_url }}) for your container registry. + diff --git a/bin/configurator/static/_includes/ru/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid b/bin/configurator/static/_includes/ru/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid index e29b3ac9a..cfe175225 100644 --- a/bin/configurator/static/_includes/ru/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid +++ b/bin/configurator/static/_includes/ru/configurator/partials/ci/gitlab_kubernetes_main_section.md.liquid @@ -2,72 +2,126 @@ - GitLab; -- Kubernetes для запуска GitLab Runner. +- Kubernetes для запуска GitLab Kubernetes Executor. -### Установка и регистрация GitLab Runner +### Установка GitLab Runner -Для установки GitLab Runner в Kubernetes и его регистрации в GitLab следуйте [официальным инструкциям](https://docs.gitlab.com/runner/register/index.html). +Следуйте [официальным инструкциям](https://docs.gitlab.com/runner/install/) для установки и регистрации GitLab Runner. Если вы собираетесь устанавливать ваш GitLab Runner в Kubernetes, то установите его в namespace `gitlab-ci`. -### Настройка GitLab Runner +### Базовая настройка GitLab Runner (без кеширования) -Измените конфигурацию зарегистрированного GitLab Runner'а, добавив в его `config.toml` следующие параметры: +Добавьте следующее в конфигурационный файл GitLab Runner `config.toml`: ```toml [[runners]] - name = "<имя зарегистрированного Runner'а>" + environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true"] + [runners.kubernetes] namespace = "gitlab-ci" + [runners.kubernetes.pod_annotations] "container.apparmor.security.beta.kubernetes.io/build" = "unconfined" + [runners.kubernetes.pod_security_context] run_as_non_root = true run_as_user = 1000 run_as_group = 1000 fs_group = 1000 -``` - -Если нужно кеширование `.werf` и `/builds` (рекомендуется), то добавьте эти параметры: -```toml -[[runners]] - name = "<имя зарегистрированного Runner'а>" - [runners.kubernetes] - [[runners.kubernetes.volumes.pvc]] + [[runners.kubernetes.volumes.empty_dir]] name = "gitlab-ci-kubernetes-executor-werf-cache" mount_path = "/home/build/.werf" - [[runners.kubernetes.volumes.pvc]] + + [[runners.kubernetes.volumes.empty_dir]] name = "gitlab-ci-kubernetes-executor-builds-cache" mount_path = "/builds" + + [[runners.kubernetes.volumes.empty_dir]] + name = "gitlab-ci-kubernetes-executor-helper-home" + mount_path = "/home/helper" + + [[runners.kubernetes.pod_spec]] + name = "fix helper HOME" + patch = ''' + containers: + - name: helper + env: + - name: HOME + value: /home/helper + ''' + patch_type = "strategic" ``` -... а если не нужно, то добавьте эти: +### Базовая настройка Gitlab Runner (с кешированием в Persistent Volumes) + +Добавьте следующее в конфигурационный файл GitLab Runner `config.toml`: ```toml [[runners]] - name = "<имя зарегистрированного Runner'а>" + environment = ["FF_USE_ADVANCED_POD_SPEC_CONFIGURATION=true"] + [runners.kubernetes] - [[runners.kubernetes.volumes.empty_dir]] + namespace = "gitlab-ci" + + [runners.kubernetes.pod_annotations] + "container.apparmor.security.beta.kubernetes.io/build" = "unconfined" + + [runners.kubernetes.pod_security_context] + run_as_non_root = true + run_as_user = 1000 + run_as_group = 1000 + fs_group = 1000 + + [[runners.kubernetes.volumes.pvc]] name = "gitlab-ci-kubernetes-executor-werf-cache" mount_path = "/home/build/.werf" - [[runners.kubernetes.volumes.empty_dir]] + + [[runners.kubernetes.volumes.pvc]] name = "gitlab-ci-kubernetes-executor-builds-cache" mount_path = "/builds" -``` -Если будете развертывать приложения с werf в тот же кластер, в котором запускается GitLab Runner, то добавьте ещё один параметр: - -```toml -[[runners]] - name = "<имя зарегистрированного Runner'а>" - [runners.kubernetes] - service_account = "gitlab-ci-kubernetes-executor" -``` + [[runners.kubernetes.volumes.pvc]] + name = "gitlab-ci-kubernetes-executor-helper-home" + mount_path = "/home/helper" -При желании произведите [дополнительную конфигурацию](https://docs.gitlab.com/runner/configuration/advanced-configuration.html) GitLab Runner'а. + [[runners.kubernetes.pod_spec]] + name = "fix helper HOME" + patch = ''' + containers: + - name: helper + env: + - name: HOME + value: /home/helper + ''' + patch_type = "strategic" -### Настройка Kubernetes + [[runners.kubernetes.pod_spec]] + name = "fix volumes permissions" + patch = ''' + initContainers: + - name: fix-volumes-permissions + image: alpine + command: + - sh + - -ec + - | + chown :$(id -g) /home/build/.werf /builds /home/helper + chmod g+rwx /home/build/.werf /builds /home/helper + securityContext: + runAsUser: 0 + runAsNonRoot: false + volumeMounts: + - mountPath: /home/build/.werf + name: gitlab-ci-kubernetes-executor-werf-cache + - mountPath: /builds + name: gitlab-ci-kubernetes-executor-builds-cache + - mountPath: /home/helper + name: gitlab-ci-kubernetes-executor-helper-home + ''' + patch_type = "strategic" +``` -Если в конфигурации GitLab Runner вы включили кеширование `.werf` и `/builds`, то создайте в кластере соответствующие PersistentVolumeClaims, например: +Создайте PVC: ```shell kubectl create -f - < Для большей безопасности можете создать более ограниченную ClusterRole/Role и использовать её вместо кластерной роли `cluster-admin` выше. +> Для большей безопасности подумайте над использованием более ограниченной в правах ClusterRole/Role и используйте её вместо `cluster-admin` ClusterRole выше. -Если Kubernetes-узлы для GitLab Runner имеют ядро Linux версии 5.12 или ниже, то разрешите в этом кластере использование FUSE для GitLab Runner следующей командой: +Теперь добавьте эту строку в конфигурационный файл GitLab Runner `config.toml`: + +```toml +[[runners]] + [runners.kubernetes] + service_account = "gitlab-ci-kubernetes-executor" +``` + +### Разрешите использование FUSE (для Kubernetes Nodes с ядром Linux старее, чем 5.13) + +Если Kubernetes Nodes, на которых вы будете запускать Kubernetes Executor Pods, имеют версию ядра Linux старее 5.13, то вам нужно разрешить использование FUSE: ```shell kubectl create -f - < Для большей безопасности создайте более ограниченную роль ClusterRole/Role и используйте ее вместо указанной выше роли `cluster-admin`. +> Для большей безопасности подумайте над использованием более ограниченной в правах ClusterRole/Role и используйте её вместо `cluster-admin` ClusterRole выше. + +Теперь добавьте эту строку в конфигурационный файл GitLab Runner `config.toml`: + +```toml +[[runners]] + [runners.kubernetes] + service_account = "gitlab-ci-kubernetes-executor" +``` + +### Установка Argo CD Image Updater -Если узлы Kubernetes, на которых размещен GitLab Runner, работают с ядром Linux версии 5.12 или ниже, включите FUSE для GitLab Runner'а в этом кластере с помощью следующей команды: +Установите Argo CD Image Updater с патчем ["continuous deployment of OCI Helm chart type application"](https://github.com/argoproj-labs/argocd-image-updater/pull/405): ```shell -$ kubectl create -f - < Этот шаг необходим только если собираются образы для платформ, отличных от хост-платформы, на которой запущен werf. +{% include configurator/partials/ci/cross_platform_note.md.liquid %} -С помощью qemu-user-static зарегистрируйте эмуляторы в Kubernetes: +Активируйте эмуляторы для ваших Kubernetes Nodes, используя qemu-user-static: -```yaml +```shell +kubectl create -f - < Для большей безопасности можете создать более ограниченную ClusterRole/Role и использовать её вместо кластерной роли `cluster-admin` выше. +> Для большей безопасности подумайте над использованием более ограниченной в правах ClusterRole/Role и используйте её вместо `cluster-admin` ClusterRole выше. -Если Kubernetes-узлы для Kubernetes Runner'а имеют ядро Linux версии 5.12 или ниже, то разрешите в этом кластере использование FUSE для Kubernetes Runner следующей командой: +Теперь добавьте эту строку в Pod, создаваемый вашим раннером: + +```yaml +spec: + serviceAccountName: ci-kubernetes-runner +``` + +### Разрешите использование FUSE (для Kubernetes Nodes с ядром Linux старее, чем 5.13) + +Если Kubernetes Nodes, на которых вы будете запускать Runner Pods, имеют версию ядра Linux старее 5.13, то вам нужно разрешить использование FUSE: ```shell kubectl create -f - < Данный шаг требуется только для сборки образов для платформ, отличных от платформы системы, где запущен werf. +> Этот шаг нужен только для сборки образов для платформ, отличных от платформы системы, где запущен werf. -Регистрируем на узлах Kubernetes эмуляторы с помощью образа qemu-user-static: +Активируйте эмуляторы для ваших Kubernetes Nodes, используя qemu-user-static: ```shell kubectl create -f - <