S N*_*S N 3 docker reactjs kubernetes
我有一个基于 docker 容器的基于 ReactJS 的应用程序,一个 shell 脚本在 docker 镜像中定义为 ENTRYPOINT,并且我能够成功使用 docker run image-name 。
\n现在的任务是使用标准的deployment.yaml文件模板使用这个docker镜像进行Kubernetes部署,如下所示
\n# Deployment file\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-app\n labels:\n app: my-app\nspec:\n replicas: 1\n selector:\n matchLabels:\n app: my-app\n template:\n metadata:\n labels:\n app: my-app\n spec:\n terminationGracePeriodSeconds: 120\n containers:\n - name: my-app\n imagePullPolicy: Always\n image: my-docker-image\n command: ["/bin/bash"]\n args: ["-c","./entrypoint.sh;while true; do echo hello; sleep 10;done"]\nRun Code Online (Sandbox Code Playgroud)\nkind: Service\napiVersion: v1\nmetadata:\n name: my-service\nspec:\n type: NodePort\n selector:\n app: my-app\n ports:\n - port: 3000\n targetPort: 3000\n protocol: TCP\n nodePort: 31110\nRun Code Online (Sandbox Code Playgroud)\nspec:\n rules:\n - http:\n paths:\n - path: /\n pathType: Prefix\n backend:\n service:\n name: my-service\n port:\n number: 3000\nRun Code Online (Sandbox Code Playgroud)\n当我执行 kubectl apply -f mydeployment.yaml 时,它会创建所需的 pod,但与直接运行 docker 映像不同,entrypoint.sh 脚本不会在创建 pod 时执行。有人可以帮忙分享上面的 yaml 文件有什么问题吗?我是否遗漏或做错了什么?
\n我还尝试在 yaml 中直接调用 npm run start in command [] 但没有运气。我可以使用 kubectl exec 进入 pod 容器,但看不到 React 应用程序正在运行,我可以手动执行 entrypoint.sh 并在浏览器中查看所需的输出。
\n编辑:添加 kubectl 日志并描述输出
\n日志:当我从 yaml 中删除command/args并应用deploy.yaml时,我按原样得到以下日志,直到启动开发服务器线路,除此之外没有任何内容。
\n> myapp start /app\n> react-scripts start\n\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Project is running at http://x.x.x.x/\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: webpack output is served from \n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: Content not from webpack is served from /app/public\n\xe2\x84\xb9 \xef\xbd\xa2wds\xef\xbd\xa3: 404s will fallback to /\nStarting the development server...\nRun Code Online (Sandbox Code Playgroud)\n描述输出
\nName: my-view-85b597db55-72jr8\nNamespace: default\nPriority: 0\nNode: my-node/x.x.x.x\nStart Time: Fri, 16 Apr 2021 11:13:20 +0800\nLabels: app=my-app\n pod-template-hash=85b597db55\nAnnotations: cni.projectcalico.org/podIP: x.x.x.x/xx\n cni.projectcalico.org/podIPs: x.x.x.x/xx\nStatus: Running\nIP: x.x.x.x\nIPs:\n IP: x.x.x.x\nControlled By: ReplicaSet/my-view-container-85b597db55\nContainers:\n my-ui-container:\n Container ID: containerd://671a1db809b7f583b2f3702e06cee3477ab1412d1e4aa8ac93106d8583f2c5b6\n Image: my-docker-image\n Image ID: my-docker-image@sha256:29f5fc74aa0302039c37d14201f5c85bc8278fbeb7d70daa2d867b7faa6d6770\n Port: <none>\n Host Port: <none>\n State: Terminated\n Reason: Completed\n Exit Code: 0\n Started: Fri, 16 Apr 2021 11:13:41 +0800\n Finished: Fri, 16 Apr 2021 11:13:43 +0800\n Last State: Terminated\n Reason: Completed\n Exit Code: 0\n Started: Fri, 16 Apr 2021 11:13:24 +0800\n Finished: Fri, 16 Apr 2021 11:13:26 +0800\n Ready: False\n Restart Count: 2\n Environment:\n MY_ENVIRONMENT_NAME: TEST_ENV\n MY_SERVICE_NAME: my-view-service\n MY_SERVICE_MAIN_PORT: 3000\n Mounts:\n /var/run/secrets/kubernetes.io/serviceaccount from default-token-9z8bw (ro)\nConditions:\n Type Status\n Initialized True \n Ready False \n ContainersReady False \n PodScheduled True \nVolumes:\n default-token-9z8bw:\n Type: Secret (a volume populated by a Secret)\n SecretName: default-token-9z8bw\n Optional: false\nQoS Class: BestEffort\nNode-Selectors: <none>\nTolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s\n node.kubernetes.io/unreachable:NoExecute op=Exists for 300s\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal Scheduled 32s default-scheduler Successfully assigned default/my-view-container-85b597db55-72jr8 to my-host\n Normal Pulled 31s kubelet Successfully pulled image "my-docker-image" in 184.743641ms\n Normal Pulled 28s kubelet Successfully pulled image "my-docker-image" in 252.382942ms\n Normal Pulling 11s (x3 over 31s) kubelet Pulling image "my-docker-image"\n Normal Pulled 11s kubelet Successfully pulled image "my-docker-image" in 211.2478ms\n Normal Created 11s (x3 over 31s) kubelet Created container my-view-container\n Normal Started 11s (x3 over 31s) kubelet Started container my-view-container\n Warning BackOff 8s (x2 over 26s) kubelet Back-off restarting failed container\nRun Code Online (Sandbox Code Playgroud)\n我的入口点.sh 是
\n#!/bin/bash\n( export REACT_APP_ENV_VAR=env_var_value;npm run start )\nexec "$@"\nRun Code Online (Sandbox Code Playgroud)\n
当您在 pod 描述中写入以下内容时:
containers:
- name: my-app
imagePullPolicy: Always
image: my-docker-image
command: ["/bin/bash"]
args: ["-c","./entrypoint.sh;while true; do echo hello; sleep 10;done"]
Run Code Online (Sandbox Code Playgroud)
该command参数覆盖容器ENTRYPOINT。上面大致相当于:
docker run --entrypoint /bin/bash my-docker-image ...args here...
Run Code Online (Sandbox Code Playgroud)
如果你想使用ENTRYPOINT图像中的 ,那么只需设置args。
| 归档时间: |
|
| 查看次数: |
6804 次 |
| 最近记录: |