У меня Skaffold хорошо работает с локальным сервером разработки и развертыванием баз данных. Я пытаюсь начать работу над create-react-app
интерфейсом, но поведение невероятно медленное и неустойчивое.
Проблемы
Основные проблемы заключаются в следующем:
- На запуск
skaffold dev --port-forward --tail
уходит до пяти минут, чтобы он наконец начал вращаться. Запуск только docker build
занимает менее 30 секунд. - Когда он, наконец, начинает вращаться, он просто сидит на
Starting the development server...
еще две минуты. Затем, девять разиз десяти я получаю следующие ошибки через несколько минут (их три, потому что это количество реплик):
Одна из десятиперейдите к Compiled Successfully! You can now view in the browser.
Он никогда не запускается в Chrome, хотя.
- Изменения в JS в create-реагировать-приложение никогда не отражаются в новом браузере. Вы должны остановиться и снова запустить Скаффолд. Скаффолд говорит
Syncing 1 files for <image>... Watching for changes...
, но ничего не меняется даже после обновления.
Что я пробовал
- Я действительно упростил то, чтоЯ пытаюсь сделать это, чтобы было легче разобраться в этом, поэтому я использую только приложение OOTB
create-react-app
. Поведение одно и то же независимо. 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
. Мне придется пропустить процесс установки для всего этого, так как он довольно длительный, поэтому следующие шаги предполагают, что у вас уже есть эта установка.
Создайте каталог проекта:
mkdir project
Создайте каталог манифеста Kubernetes и перейдите в него:
mkdir k8s && cd k8s
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
Создайте 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
Moveобратно в родительский:
cd ..
Создайте 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
Создать новый create-react-app
проект:
npx create-react-app test-app
Перейдите в каталог:
cd test-app
Создайте Dockerfile.dev
и добавьте следующее:
FROM node:alpine
WORKDIR '/app'
EXPOSE 3000
CMD ["npm", "run", "start"]
COPY package* ./
RUN npm install
COPY . .
Создайте файл .dockerignore
и добавьте следующее:
node_modules
*.swp
Вернитесь в родительский каталог:
cd ..
Убедитесь, что minikube
- это running:
minikube start
Запустите skaffold.yaml
:
skaffold dev --port-forward --tail
Это то, что вызывает у меня проблемы.