Нестабильное и медленное поведение с помощью create-реакции-приложения и Skaffold kubernetes - PullRequest
3 голосов
/ 15 октября 2019

У меня Skaffold хорошо работает с локальным сервером разработки и развертыванием баз данных. Я пытаюсь начать работу над create-react-app интерфейсом, но поведение невероятно медленное и неустойчивое.

Проблемы

Основные проблемы заключаются в следующем:

  1. На запуск skaffold dev --port-forward --tail уходит до пяти минут, чтобы он наконец начал вращаться. Запуск только docker build занимает менее 30 секунд.
  2. Когда он, наконец, начинает вращаться, он просто сидит на Starting the development server... еще две минуты.
  3. Затем, девять разиз десяти я получаю следующие ошибки через несколько минут (их три, потому что это количество реплик): enter image description here

    Одна из десятиперейдите к Compiled Successfully! You can now view in the browser. Он никогда не запускается в Chrome, хотя.

  4. Изменения в JS в create-реагировать-приложение никогда не отражаются в новом браузере. Вы должны остановиться и снова запустить Скаффолд. Скаффолд говорит Syncing 1 files for <image>... Watching for changes..., но ничего не меняется даже после обновления.

Что я пробовал

  1. Я действительно упростил то, чтоЯ пытаюсь сделать это, чтобы было легче разобраться в этом, поэтому я использую только приложение OOTB create-react-app. Поведение одно и то же независимо.
  2. minikube delete и minikube start несколько раз (это произошло потому, что даже развертывание сервера стало работать неправильно после попытки create-react-app)

Код и шаги для воспроизведения

Я нахожусь на MacOS Mojave (10.14.6), использую Docker для Mac, Kubernetes (v1.16.0), minikube (v1.4.0), Skaffold (v0.39.0)) и create-react-app. Мне придется пропустить процесс установки для всего этого, так как он довольно длительный, поэтому следующие шаги предполагают, что у вас уже есть эта установка.

  1. Создайте каталог проекта:

    mkdir project

  2. Создайте каталог манифеста Kubernetes и перейдите в него:

    mkdir k8s && cd k8s

  3. Makea client-deployment.yaml и добавьте следующее:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: client-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          component: web
      template:
        metadata:
          labels:
            component: web
        spec:
          containers:
            - name: client
              image: testapp/client
              ports:
                - containerPort: 3000
    
  4. Создайте client-cluster-ip-service.yaml и добавьте следующее:

    apiVersion: v1
    kind: Service
    metadata:
      name: client-cluster-ip-service
    spec:
      type: ClusterIP
      selector:
        component: web
      ports:
        - port: 3000
          targetPort: 3000
    
  5. Moveобратно в родительский:

    cd ..

  6. Создайте skaffold.yaml и добавьте следующее:

    apiVersion: skaffold/v1beta15
    kind: Config
    build:
      local:
        push: false
      artifacts:
        - image: testapp/client
          context: web
          docker:
            dockerfile: Dockerfile.dev
          sync:
            manual:
              - src: "**/*.js"
                dest: .
              - src: "**/*.html"
                dest: .
              - src: "**/*.css"
                dest: .
    deploy:
      kubectl:
        manifests:
          - k8s/client-deployment.yaml
          - k8s/client-cluster-ip-service.yaml
    portForward:
      - resourceType: service
        resourceName: client-cluster-ip-service
        port: 3000
        localPort: 3000
    
  7. Создать новый create-react-app проект:

    npx create-react-app test-app

  8. Перейдите в каталог:

    cd test-app

  9. Создайте Dockerfile.dev и добавьте следующее:

    FROM node:alpine
    
    WORKDIR '/app'
    EXPOSE 3000
    CMD ["npm", "run", "start"]
    
    COPY package* ./
    RUN npm install
    COPY . .
    
  10. Создайте файл .dockerignore и добавьте следующее:

    node_modules
    *.swp
    
  11. Вернитесь в родительский каталог:

    cd ..

  12. Убедитесь, что minikube - это running:

    minikube start

  13. Запустите skaffold.yaml:

    skaffold dev --port-forward --tail

Это то, что вызывает у меня проблемы.

1 Ответ

1 голос
/ 15 октября 2019

Хорошо. Игнорирование. Начал с одной реплики и все работало нормально. Два работали нормально. Три работали, если skaffold уже работал, но не из свежего skaffold dev --port-forward --tail.

skaffold ssh, а затем сделал top. Не хватало оперативной памяти ... хорошо было на 86% использования. Увеличено значение по умолчанию с 2 ГБ до 8 ГБ, и теперь оно работает нормально.

Сначала удалили виртуальную машину с помощью minikube delete, а затем создали новую с minikube start --memory='8g'. Все хорошо сейчас.

...