KILL -9 在 Kubernetes 容器中用于在构建时反应应用程序
KILL -9 in Kubernetes container for react app while building
我有一个反应应用程序,我想使用 docker 文件部署到 kubernetes,并使用 nginx 托管它。我的 Dockerfile 看起来像这样
FROM node:14-alpine as build
# Install git
RUN apk update && apk upgrade && \
apk add --no-cache git
WORKDIR /src
COPY package*.json ./
RUN npm config set unsafe-perm true
RUN npm install
COPY . .
RUN npm run build
运行 kustomization 后我的 kuberetes 配置如下所示
apiVersion: v1
data:
settings.ts.ctmpl: |
export const LIGHTHOUSE_API_HOST = 'stageBackendURL';
kind: ConfigMap
metadata:
name: lighthouse-web-configmap-6968hk6f5g
---
apiVersion: v1
kind: Service
metadata:
labels:
app: lighthouse-web
manifest_type: svc
name: lighthouse-web
spec:
ports:
- port: 80
protocol: TCP
targetPort: 3001
selector:
app: lighthouse-web
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lighthouse-web
spec:
minReadySeconds: 10
progressDeadlineSeconds: 600
selector:
matchLabels:
app: lighthouse-web
template:
metadata:
labels:
app: lighthouse-web
name: lighthouse-web
spec:
containers:
- args:
- npm
- run
- serve
image: <url to image>
imagePullPolicy: Always
name: lighthouse-web
ports:
- containerPort: 3001
name: http
volumeMounts:
- mountPath: /src/src/settings.ts
name: lighthouse-web-config
subPath: settings.ts
- mountPath: /src/build
name: lighthouse-web-static
- image: nginx:1.14
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: lighthouse-web-static
initContainers:
- args:
- -template
- /config-templates/settings.ts.ctmpl:/config/settings.ts
- -log-level
- trace
- -once
image: <URL TO DOCKER IMAGE>
imagePullPolicy: Always
name: consul-template
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 500m
memory: 500Mi
volumeMounts:
- mountPath: /config-templates
name: lighthouse-web-configmap
- mountPath: /config
name: lighthouse-web-config
volumes:
- configMap:
name: lighthouse-web-configmap-6968hk6f5g
name: lighthouse-web-configmap
- emptyDir: {}
name: lighthouse-web-config
- emptyDir: {}
name: lighthouse-web-static
当我部署它时,构建目录是空的。我尝试通过 ssh 连接到容器并手动构建它但出现此错误:
export NODE_OPTIONS=--max_old_space_size=4096 && react-scripts build
Creating an optimized production build...
The build failed because the process exited too early. This probably means the system ran out of memory or someone called `kill -9` on the process.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! lighthouse@0.1.0 build: `export NODE_OPTIONS=--max_old_space_size=4096 && react-scripts build`
npm ERR! Exit status 1
npm ERR!
我早些时候将内存和 cpu 保持在 1gi 和 100m,但尝试增加到 16Gi 和 8Gi 但仍然没有用。
关于上面的几点说明:
1:我会使用多阶段 Dockerfile 构建,整个构建过程发生在节点容器中,但最终、完整、构建的应用程序随后被复制到基于 nginx 的容器中,例如
FROM node as build
...
FROM nginx
COPY --from=build /path/to/app /usr/share/nginx/html
2:npm 构建是昂贵的过程,在您的 kube 环境中进行 npm 构建,设置合理的 运行 时间限制,很可能 运行 出现您在此处提到的问题。
3:确保在您的 workstation/build 系统
上正确创建了应用工件
我有一个反应应用程序,我想使用 docker 文件部署到 kubernetes,并使用 nginx 托管它。我的 Dockerfile 看起来像这样
FROM node:14-alpine as build
# Install git
RUN apk update && apk upgrade && \
apk add --no-cache git
WORKDIR /src
COPY package*.json ./
RUN npm config set unsafe-perm true
RUN npm install
COPY . .
RUN npm run build
运行 kustomization 后我的 kuberetes 配置如下所示
apiVersion: v1
data:
settings.ts.ctmpl: |
export const LIGHTHOUSE_API_HOST = 'stageBackendURL';
kind: ConfigMap
metadata:
name: lighthouse-web-configmap-6968hk6f5g
---
apiVersion: v1
kind: Service
metadata:
labels:
app: lighthouse-web
manifest_type: svc
name: lighthouse-web
spec:
ports:
- port: 80
protocol: TCP
targetPort: 3001
selector:
app: lighthouse-web
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lighthouse-web
spec:
minReadySeconds: 10
progressDeadlineSeconds: 600
selector:
matchLabels:
app: lighthouse-web
template:
metadata:
labels:
app: lighthouse-web
name: lighthouse-web
spec:
containers:
- args:
- npm
- run
- serve
image: <url to image>
imagePullPolicy: Always
name: lighthouse-web
ports:
- containerPort: 3001
name: http
volumeMounts:
- mountPath: /src/src/settings.ts
name: lighthouse-web-config
subPath: settings.ts
- mountPath: /src/build
name: lighthouse-web-static
- image: nginx:1.14
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
name: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: lighthouse-web-static
initContainers:
- args:
- -template
- /config-templates/settings.ts.ctmpl:/config/settings.ts
- -log-level
- trace
- -once
image: <URL TO DOCKER IMAGE>
imagePullPolicy: Always
name: consul-template
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 500m
memory: 500Mi
volumeMounts:
- mountPath: /config-templates
name: lighthouse-web-configmap
- mountPath: /config
name: lighthouse-web-config
volumes:
- configMap:
name: lighthouse-web-configmap-6968hk6f5g
name: lighthouse-web-configmap
- emptyDir: {}
name: lighthouse-web-config
- emptyDir: {}
name: lighthouse-web-static
当我部署它时,构建目录是空的。我尝试通过 ssh 连接到容器并手动构建它但出现此错误:
export NODE_OPTIONS=--max_old_space_size=4096 && react-scripts build
Creating an optimized production build...
The build failed because the process exited too early. This probably means the system ran out of memory or someone called `kill -9` on the process.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! lighthouse@0.1.0 build: `export NODE_OPTIONS=--max_old_space_size=4096 && react-scripts build`
npm ERR! Exit status 1
npm ERR!
我早些时候将内存和 cpu 保持在 1gi 和 100m,但尝试增加到 16Gi 和 8Gi 但仍然没有用。
关于上面的几点说明:
1:我会使用多阶段 Dockerfile 构建,整个构建过程发生在节点容器中,但最终、完整、构建的应用程序随后被复制到基于 nginx 的容器中,例如
FROM node as build
...
FROM nginx
COPY --from=build /path/to/app /usr/share/nginx/html
2:npm 构建是昂贵的过程,在您的 kube 环境中进行 npm 构建,设置合理的 运行 时间限制,很可能 运行 出现您在此处提到的问题。
3:确保在您的 workstation/build 系统
上正确创建了应用工件