Более подробную информацию о проекте и связанных с ним репозиториях можно найти здесь: pelican-documentation.
- Установите Docker
- Установите Visual Studio Code
- Установите плагин Visual Studio Code Dev Containers
- Установите Lens (commercial) или OpenLens (open source)
Откройте папку этого репозитория в VSCode, он может сразу предложить вам повторно открыть его в Dev container, или вы можете нажать Remote Explorer, найти кнопку плюс и выбрать опцию Open Current Folder in Container и подождать пока он будет готов.
Когда Dev Container будет готов, VSCode снова откроется. Откройте новый терминал, который будет выполнять команды в подготовленном Linux-контейнере, который мы уже предварительно установили и настроили:
- Docker Outside of Docker или Docker из Docker, чтобы иметь возможность использовать docker демон хоста изнутри контейнера
- kind для создания локального кластера k8s в Docker
- kubectl для вызова кластера k8s из CLI (в обход Lens)
- helm, helmfile для одновременного развертывания всех сервисов helm в локальном кластере k8s, созданном с помощью
kind - helm-diff наглядно показывает, что изменилось с момента последнего применения
helmfile apply
Примечание: Вам не нужно устанавливать эти пакеты в свою ОС, они уже являются частью Dev container. Таким образом, это простой способ запустить приложение на любой ОС.
Чтобы создать новый кластер, в котором вы будете работать, выполните следующую команду один раз:
kind create cluster --name pelican --config kind-local-config.yaml --kubeconfig ./.pelican-cluster-kubeconfigЧтобы удалить ранее созданный кластер, выполните следующую команду:
kind delete cluster --name pelicanЗатем у вас должна быть возможность получить созданную конфигурацию кластера k8s здесь, в корне репозитория
.pelican-cluster-kubeconfig, и использовать ее в Lens для подключения к кластеру.
В Lens вы можете перейти в File -> Add Cluster, поместить туда скопированное содержимое файла config.
После чего вы сможете подключиться к нему.
Чтобы развернуть приложение в кластере в первый раз или для повторного развертывания после изменения helm-чартов или их конфигурации, выполните следующую команду:
helmfile cache cleanup && helmfile --environment local --namespace local -f deploy/helmfile.yaml applyКогда команда будет выполнена и все модули k8s будут запущены во вкладке local, вы сможете перейти по ссылке http://localhost:40110/ в вашем браузере и увидеть Hello World.
Примечание: в первый раз это можеть занять довольно большое количество времени.
Примечание:
helmfile cache cleanupнеобходима для принудительного повторного извлечения values.yaml файлов из репозиториев git. В противном случае это никогда не приведет к их аннулированию. Ссылки: roboll/helmfile#720 (comment) и https://helmfile.readthedocs.io/en/latest/#cache.
Примечание: если была обновлена версия одного из ваших сервисов, например, была опубликована более новая версия
pelican-ui:latest, вы не увидите изменений, выполнив командуhelmfile apply. Вместо этого вам нужно удалить соответствующий служебный pod, в случаеpelican-uiэтоpelican-nginx. После чего он повторно автоматически развернется и получит последние изменения.
Чтобы восстановить контент на сайте из бекапа, выполните следующую команду:
bash ./restore-local-env.shПримечание: все внесенные изменения будут удалены.
Чтобы увидеть, как будут выглядеть все чарт-манифесты перед применением, вы можете выполнить следующую команду:
helmfile cache cleanup && helmfile --environment local --namespace local -f deploy/helmfile.yaml template- ui: http://localhost:40110
- cms: http://localhost:40110/cms/admin
- minio-s3-ui: http://minio-s3-console.localhost:40110
- Открыть http://minio-s3-console.localhost:40110
- Ввести логин и пароль:
login: adminpassword: rootPassword
- Открыть http://localhost:40110/cms/admin
- Ввести логин и пароль:
email: admin@init-strapi-admin.strapi.iopassword: admin
-
OpenLens не показывает никаких развернутых модулей. Убедитесь, что для параметра "Namespace" в поле "Workloads" задано значение "
local" или "All namespaces". -
не открывается http://localhost:40110/
Невозможно получить доступ до сайта, локальный хост отказался подключаться.Если вы видите это в своем браузере, пожалуйста, попробуйте открыть сайт в режиме инкогнито.
-
не устанавливается чарт pelican-ui
COMBINED OUTPUT: Release "pelican-ui" does not exist. Installing it now. coalesce.go:286: warning: cannot overwrite table with non table for nginx.ingress.annotations (map[]) coalesce.go:286: warning: cannot overwrite table with non table for nginx.ingress.annotations (map[]) Error: context deadline exceededEсли вы увидите это после попытки выполнить команду
helmfile apply, просто повторите попыткуhelmfile apply. -
в случае возникновения какой-либо другой странной проблемы:
- Удалите docker container под названием
pelican-control-plane. - Удалите кластер из Lens.
- Попробуйте выполнить все команды из инструкции, начиная с
kind create.
- Удалите docker container под названием
- https://shisho.dev/blog/posts/docker-in-docker/
- https://devopscube.com/run-docker-in-docker/
- kubernetes-sigs/kind#3196
- https://github.com/devcontainers/features
- https://fenyuk.medium.com/helm-for-kubernetes-helmfile-c22d1ab5e604
Шаги, чтобы проверить еще не смерженные изменения из ветки (на примере UI, в CMS репе по аналогии):
- В репозитории UI нужно запустить билд образа:
docker build -t local-ui:0.0.1 . - В репозитории local-env в docker контейнере после того, как 1 шаг закончится, нужно запустить:
kind load docker-image local-ui:0.0.1 --name pelican- В values-ui.yaml.gotmpl вставить:
image:
registry: ""
repository: "local-ui"
tag: "0.0.1"
pullPolicy: "Never"- Выполнить команду:
helmfile cache cleanup && helmfile --environment local --namespace local -f deploy/helmfile.yaml applyЧтобы увидеть, сколько ресурсов потребляется сервисами, вы можете выполнить следующую команду:
kubectl top pods --namespace local