Docker容器独立运行,但在kubernetes中失败

我有docker容器(Hadoop安装https://github.com/kiwenlau/hadoop-cluster-docker ),我可以使用sudo docker run -itd -p 50070:50070 -p 8088:8088 --name hadoop-master kiwenlau/hadoop:1.0命令没有任何问题,但是当试图将相同的映像部署到kubernetes时,pod无法启动。 为了创build部署,我使用kubectl run hadoop-master --image=kiwenlau/hadoop:1.0 --port=8088 --port=50070 command

这里描述pod命令的日志

 Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 6m 6m 1 default-scheduler Normal Scheduled Successfully assigned hadoop-master-2828539450-rnwsd to gke-mtd-cluster-default-pool-6b97d4d0-hcbt 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id 1560ff87e0e7357c76cec89f5f429e0b9b5fc51523c79e4e2c12df1834d7dd75 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id 1560ff87e0e7357c76cec89f5f429e0b9b5fc51523c79e4e2c12df1834d7dd75 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id c939d3336687a33e69d37aa73177e673fd56d766cb499a4235e89d554d233c37 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id c939d3336687a33e69d37aa73177e673fd56d766cb499a4235e89d554d233c37 6m 6m 2 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 10s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id 7d1c67686c039e459ee0ea3936eedb4996a5201f6a1fec02ac98d219bb07745f 6m 6m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id 7d1c67686c039e459ee0ea3936eedb4996a5201f6a1fec02ac98d219bb07745f 6m 6m 2 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 20s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 5m 5m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id a8879a2c794b3e62f788ad56e403cb619644e9219b2c092e760ddeba506b2e44 5m 5m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id a8879a2c794b3e62f788ad56e403cb619644e9219b2c092e760ddeba506b2e44 5m 5m 3 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 40s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 5m 5m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id 8907cdf19c51b87cea6e1e611649e874db2c21f47234df54bd9f27515cee0a0e 5m 5m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id 8907cdf19c51b87cea6e1e611649e874db2c21f47234df54bd9f27515cee0a0e 5m 3m 7 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 1m20s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 3m 3m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id 294072caea596b47324914a235c1882dbc521cc355644a1e25ebf06f0e04301f 3m 3m 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id 294072caea596b47324914a235c1882dbc521cc355644a1e25ebf06f0e04301f 3m 1m 12 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 2m40s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 6m 50s 7 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Pulled Container image "kiwenlau/hadoop:1.0" already present on machine 50s 50s 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Created Created container with id 7da7508ac864d04d47639b0d2c374a27c3e8a3351e13a2564e57453cf857426d 50s 50s 1 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Normal Started Started container with id 7da7508ac864d04d47639b0d2c374a27c3e8a3351e13a2564e57453cf857426d 6m 0s 31 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt spec.containers{hadoop-master} Warning BackOff Back-off restarting failed container 49s 0s 5 kubelet, gke-mtd-cluster-default-pool-6b97d4d0-hcbt Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "hadoop-master" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=hadoop-master pod=hadoop-master-2828539450-rnwsd_default(562dae39-a757-11e7-a5a3-42010a8401c6)" 

kubectl日志输出:

 kubectl logs hadoop-master-2828539450-rnwsd * Starting OpenBSD Secure Shell server sshd ...done. 

请注意,docker集装箱本身不启动hadoop。 为了启动它,我必须连接到容器,并手动启动hadoop,但是我想现在只需要在K8s中运行容器。

谢谢

kubernetes中的等价命令是

 kubectl run -it hadoop-master --image=kiwenlau/hadoop:1.0 --port=8088 --port=50070 

其实这不是关于kubernetes,Dockerfile中有错误。

docker容器在其主进程完成时退出。

使用CMD [ "sh", "-c", "service ssh start; bash"] ,SSH服务在后台启动,然后容器停止工作。

它应该是一个永远在前台运行的可执行脚本/程序,例如~/start-hadoop.sh

仅供参考,通常我们不需要SSH容器,作为docker exec -it some_container bash应该是足够的。