суббота, 4 января 2025 г.

Заметки о сосуществовании сервера GitLab и кластер Kubernetes

Забавно было пропасть на 3 года.

Ниже приведены заметки и личный субъективный опыт отработки взаимодействия k8s кластера и сервера GitLab - каждому своё.

  • в своей лаборатории я разносил namespace для gitlab-agent и gitlab-runner, из плюсов - атамарное управление разными уровнями функциональной нагрузки:

[ladmin@k8sm01 k8sdemo]$ kubectl get namespaces | grep gitlab

gitlab-agent-k8s    Active   36d

gitlab-runners-ns   Active   52m

  • правильные настройки в values.yaml  для установки gitlab-runner на k8s в части репозитария и образа:
image:
  registry: registry.gitlab.com
  image: gitlab-org/gitlab-runner
  tag: alpine-v17.6.0
версия образа - будет меняться по необходимости.

  •  я использовал  встроенный в GitLab сервер Container Registry без использования SSL сертификатов - лень было делать в лаборатории. В результате я получал ImagePullBackOff при попытке развернуть что-либо с детализацией ошибки "server gave HTTP reply to HTTPS client". Исправил это путём модификации /etc/containerd/config.toml каждого узла кластера k8s.
        
    
    далее следует выполнить:
sudo systemctl restart containerd.service
  • после обновления GitLab сервер необходимо также обновить GitLab agent на кластере k8s.

helm upgrade <release_name> gitlab/gitlab-agent  --namespace <k8s_namespace_name> --set image.tag=vX.Y.Z --set config.token=<your_token>  --set config.kasAddress=ws://devops.test-lab.ru/-/kubernetes-agent/ --set replicas=1

            Если забыть указать токен, то вы получите ошибку 

kubectl logs  k8s-gitlab-agent-v2-56777f97d6-dnbqq  -n gitlab-agent-k8s

{"time":"2025-01-04T10:21:36.816484327Z","level":"ERROR","msg":"Program aborted","error":"token file: open /etc/agentk/secrets/token: no such file or directory"}

  • при конфигурации GitLab сервер для использования Container Registry я допустил ошибку, использовав один и тот же порт для нескольких элементов GitLab. Ошибку удалось вычислить по записи в /var/log/gitlab/registry/current.
sudo cat /var/log/gitlab/registry/current | tail -10

 

"2024-12-26_08:22:56.55672 time="2024-12-26T11:22:56.556+03:00" level=fatal msg="listen tcp 127.0.0.1:5005: bind: address already in use"

          Что было исправлено:


    Далее необходимо выполнить команды ниже, иначе ошибка никуда не уйдёт (по-моему, "gitlab-ctl reconfigure" будет достаточно):

sudo systemctl restart gitlab.target

sudo gitlab-ctl restart nginx

sudo gitlab-ctl reconfigure

sudo gitlab-ctl status


  • если в секции ниже в values.yaml для gitlab runner значения параметров  "allowPrivilegeEscalation", "privileged" будут иметь разные значения - получите ошибку "cannot set `allowPrivilegeEscalation` to false and `privileged` to true". 

securityContext:
  allowPrivilegeEscalation: true
  readOnlyRootFilesystem: false
  runAsNonRoot: true
  privileged: true
  capabilities:
    drop: ["ALL"]