Переход из Docker в Kubernetes

Внимание

  • Перед переходом необходимо обновить Test IT до последней docker-версии, соответствующей выходу сборки Kubernetes.
  • Во время перехода на Kubernetes продукт будет недоступен.
  1. Задайте необходимые значения переменных для проекта:
    # minio_vars
    export TMS_FILE_BUCKET_NAME=testit
    export AVATARS_FILE_BUCKET_NAME=avatars
    
    # docker_vars
    export COMPOSE_FILE_PATH=/absolute/path/to/testit/docker-compose.yml
    export COMPOSE_PROJECT_PREFIX=prod
    export COMPOSE_NETWORK_NAME=123123_yoonion_network_local
    
  2. Выполните резервное копирование docker-версии Test IT:
    chmod +x scripts/pre_k8s_backup.sh
    ./scripts/pre_k8s_backup.sh
    
  3. По окончании резервного копирования сохраните путь, по которому расположен архив (он отобразится в сообщении об успешном окончании резервного копирования):
    Backup successful! Archive saved at: '/path/to/testit_docker_to_k8s.tar'
    
  4. Сравните переменные из .env файла (в директории docker-версии продукта) с values.yaml:general в директориях testit_backend и testit_frontend:
    # testit_frontend/values.yaml
    general:
      image:
        repository: "docker.testit.ru/testit" # <--env.TMS_DOCKER_REGISTRY
        tag: 4.4.0  #<--env.TMS_CONTAINER_VERSION
        pullPolicy: IfNotPresent  # политика скачивания docker-образов (IfNotPresent, Always, Never)
      config:
        CWM_ENABLED: "false"
        CWM_S3_BUCKET_SECRET_KEY: "secretKey"
        WIKI_ENABLED: "false"
        WIKI_S3_BUCKET_SECRET_KEY: ""
    
    # testit_backend/values.yaml
    general:
      image:
        repository: "docker.testit.ru/testit" # <--env.TMS_DOCKER_REGISTRY
        tag: 4.4.0  #<--env.TMS_CONTAINER_VERSION
        pullPolicy: IfNotPresent  # политика скачивания docker-образов (IfNotPresent, Always, Never)
      config: 
        AUTH_CACHE_CONNECTION_STRING: "auth-cache" # должно соответствовать .authCache.name при стандартном запуске
        FRONTEND_URL: "http://localhost"
        RABBITMQ_DEFAULT_USER: "testit"
        RABBITMQ_DEFAULT_PASS: "password"
        RABBITMQ_DEFAULT_VHOST: "testitrabbit"
        RABBITMQ_DEFAULT_HOST: "rabbitmq"
        RABBITMQ_DEFAULT_PORT: "5672"
        RABBITMQ_AUTH_MODE: "plain" 
        RABBITMQ_CLIENT_CERT_PATH: "/etc/rabbitmq/ssl/client/testit.pfx"
        RABBITMQ_CLIENT_CERT_PASSPHRASE: 
        RABBITMQ_SSL_ENABLED: "false"
        USE_PKCE: "true"
        INSECURE_REMOTES: ""
        SYNC_RESULT_LINKS_EVERY_SEC: "120"
        AWS_CONNECTION_STRING: "http://minio:9000" # должно соответствовать .minio.name при стандартном запуске
        AWS_ACCESS_KEY: "testitAccessKey"
        AWS_SECRET_KEY: "testitSecretKey"
        INFLUX_CONNECTION_STRING: "http://influxdb:8086" # должно соответствовать .influxdb.name при стандартном запуске
        INFLUX_AUTH_ENABLED: "false"
        INFLUX_USERNAME: "influx"
        INFLUX_PASSWORD: "influxpass"
        TEST_RESULT_LINK_REQUEST_LIFETIME_SEC: "600"
        DATABASE_TIMEOUT_SEC: "600"
        THREAD_PER_PROCESSOR: "10"
        TMS_FILE_BUCKET_NAME: "testit"
        AVATARS_FILE_BUCKET_NAME: "avatars"
        SMTP_ENABLE: "false"
        SMTP_FROM: ""
        SMTP_HOST: ""
        SMTP_PORT: ""
        SMTP_LOGIN: ""
        SMTP_DOMAIN: ""
        SMTP_PASSWORD: ""
        SMTP_CONNECTION: ""
        SMTP_AUTHENTICATION: ""
        SMTP_SKIP_CERTIFICATE: "false"
        SMTP_TLS_VERSION: "tls"
        SMTP_LOG_ENABLE: "false"
        PERF_MODULE_ENABLED: "false"
        POSTGRES_USER: "postgres"            # данные для подключения к PostgreSQL и названия баз данных
        POSTGRES_PASSWORD: "F1rstL0g0N!"
        POSTGRES_DB: "testitdb"
        POSTGRES_AUTH_DB: "authdb"
        POSTGRES_AVATARS_DB: "avatarsdb"
        POSTGRES_BACKGROUND_DB: "backgrounddb"
        POSTGRES_LICENSE_DB: "licensedb"
        ASPNETCORE_ACCESS_TOKEN_EXPIRATION_MINUTES: "800"
        ASPNETCORE_REFRESH_TOKEN_EXPIRATION_MINUTES: "8000"
        CALCULATION_AUTOTESTS_STABILITYPERCENTAGE_DELAY_SECONDS: "600"
        INFLUX_DISABLE_UPLOAD: "false"
        APPLICATION__DEVELOPERMODE: "false"
    
  5. Опционально: При необходимости, внесите изменения в отдельном файле values-override.yaml, раскомментировав только те строки, которые хотите поменять. Например:
    # testit_backend/values-override.yaml
    # ...
    general:
      config:
        # ...
        # SMTP_LOG_ENABLE:
        # PERF_MODULE_ENABLED:
        POSTGRES_USER: "testituser"
        POSTGRES_PASSWORD: "8wkj9l!0asdk"
        # POSTGRES_DB:
        # POSTGRES_AUTH_DB:
        # POSTGRES_AVATARS_DB:
        # POSTGRES_BACKGROUND_DB:
        # POSTGRES_LICENSE_DB:
        # ...
    # ...
    
    # testit_frontend/values-override.yaml
    # ...
    frontend:
      replicaCount: 3
    #   resources: {}
    # ...
    
  6. Установите Test IT Kubernetes.
  7. Задайте необходимые значения переменных для проекта:
    # Убедитесь, что вводите правильные значения переменных (testit_backend/values.yaml или testit_backend/values-override.yaml)
    # minio_vars
    export AWS_CONNECTION_STRING="http://minio:9000"
    export AWS_ACCESS_KEY="yourAccessKey"
    export AWS_SECRET_KEY="yourSecretKey"
    export TESTIT_BUCKET="testit"
    export AVATARS_BUCKET="avatars"
    
    # postgres_vars
    export POSTGRES_USER="postgres"
    export POSTGRES_PASSWORD="password"
    export POSTGRES_HOST="postgres"
    export POSTGRES_PORT="5432"
    
  8. Восстановите данные из резервной копии, используя пространство имен, в котором создали Test IT Kubernetes и путь, который сохранили после успешного выполнения scripts/pre_k8s_backup.sh:
    # Задавать эти переменные не обязательно, скрипт может подтянуть из уже запущенных внутренних postgres и minio
    chmod +x scripts/move_to_k8s.sh
    ./scripts/move_to_k8s.sh <namespace> /path/to/testit_docker_to_k8s.tar
    
    После успешного выполнения скрипта отобразится сообщение:
    Restore process completed successfully! Your Test IT is running on Kubernetes now!
    If you have SSL certificates (trusted-certificates-volume) or any other configurations to apply, you can reference the Test IT docs for guides.