nginx 映像在 kubectl 部署和 pods 中的行为不同
nginx image behaves differently in kubectl deployment and pods
我正在使用 nginx 映像创建 pods 如下 -
$ kubectl run nginx --image=nginx --port=80 -- /bin/sh -c 'sleep 20000'
$ kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=1
这两个结果pods如下-
$ kubectl get pods
nginx 1/1 Running 0 24s
nginx-deploy-7496796997-wkhv8 1/1 Running 0 19s
curl 连接到“nginx-deploy”pod 中的本地主机,而在其他 pod 中则没有。
$ kubectl exec -it nginx -- /bin/sh -c 'curl localhost'
curl: (7) Failed to connect to localhost port 80: Connection refused
$ k exec -it nginx-deploy-7496796997-wkhv8 -- /bin/sh -c 'curl localhost'
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
....
nginx 图像在这两个中表现不同的任何原因 pods?
/bin/sh -c 'sleep 20000'
您的命令已覆盖 nginx 映像中定义的默认 CMD/ENTRYPOINT。结果,nginx 服务器将无法启动。如果你再次 kubectl run
没有你的命令,nginx 将 运行 喜欢部署。
# Here command = /bin/sh -c 'sleep 20000'
kubectl run nginx --image=nginx --port=80 -- command
当您使用命令创建pod时,它会覆盖Dockerfile中的命令。这样 nginx 服务器就不会在 pod 中启动。请参考nginx的Dockerfile
- Have not defined COMMAND and ARGS in Kubernetes, use Dockerfile's config.
- Have defined COMMAND (no effect if ARGS defined or not) in Kubernetes, use Kubernetes COMMAND.
- Have not defined COMMAND but ARGS in Kubernetes, use ENTRYPOINT in Dockerfile and ARGS in Kubernetes.
综上所述,Kubernetes的优先级更高。
我正在使用 nginx 映像创建 pods 如下 -
$ kubectl run nginx --image=nginx --port=80 -- /bin/sh -c 'sleep 20000'
$ kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=1
这两个结果pods如下-
$ kubectl get pods
nginx 1/1 Running 0 24s
nginx-deploy-7496796997-wkhv8 1/1 Running 0 19s
curl 连接到“nginx-deploy”pod 中的本地主机,而在其他 pod 中则没有。
$ kubectl exec -it nginx -- /bin/sh -c 'curl localhost'
curl: (7) Failed to connect to localhost port 80: Connection refused
$ k exec -it nginx-deploy-7496796997-wkhv8 -- /bin/sh -c 'curl localhost'
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
....
nginx 图像在这两个中表现不同的任何原因 pods?
/bin/sh -c 'sleep 20000'
您的命令已覆盖 nginx 映像中定义的默认 CMD/ENTRYPOINT。结果,nginx 服务器将无法启动。如果你再次 kubectl run
没有你的命令,nginx 将 运行 喜欢部署。
# Here command = /bin/sh -c 'sleep 20000'
kubectl run nginx --image=nginx --port=80 -- command
当您使用命令创建pod时,它会覆盖Dockerfile中的命令。这样 nginx 服务器就不会在 pod 中启动。请参考nginx的Dockerfile
- Have not defined COMMAND and ARGS in Kubernetes, use Dockerfile's config.
- Have defined COMMAND (no effect if ARGS defined or not) in Kubernetes, use Kubernetes COMMAND.
- Have not defined COMMAND but ARGS in Kubernetes, use ENTRYPOINT in Dockerfile and ARGS in Kubernetes.
综上所述,Kubernetes的优先级更高。