0

实际上,我按照手册https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app#console来部署 Web 应用程序教程。我在我的本地目录中制作了 docker 文件和图像。我将图像上传到谷歌云平台容器注册表。图像被推送到注册表是成功的。然后我制作了 kubernetes 集群并尝试部署它。但是容器出现错误“CrashLoopBackOff”。

我几次删除了集群和 pod,但没有任何改变。容器启动时出现错误消息。

按照文档,错误是“pods 重复启动并崩溃”,解决方案是仔细观察日志......

我搜索了其他用户案例:例如 ImagePullPolicy : always / restartPolicy : always but error notsolved... enter image description here

ps:根据 pods log..errorcode 为 0

pps:现在我尝试更改容器的 yaml 文件。imagePullPolicy ifnotPresentAlways. _ 但

Pod "nginx-1-99dcd4d9f-84szv" is invalid: 
spec: Forbidden: pod updates may not change fields other than 
`spec.containers[*].image`, 
`spec.initContainers[*].image`, 
`spec.activeDeadlineSeconds` or 
`spec.tolerations` (only additions to existing tolerations)   

core.PodSpec{    
    Volumes: []core.Volume{
        {Name: "default-token-stk86", VolumeSource: core.VolumeSource{Secret: &core.SecretVolumeSource{SecretName: "default-token-stk86", DefaultMode: &420
                }
            }
        }
    },    InitContainers: nil,    Containers: []core.Container{
        {   
             TerminationMessagePath: "/dev/termination-log",    
             TerminationMessagePolicy: "File", 
             -  ImagePullPolicy: "Always", 
             +  ImagePullPolicy: "IfNotPresent",    
             SecurityContext: nil,    
             Stdin: false,
        },
    },    EphemeralContainers: nil,    RestartPolicy: "Always",
}

出现此错误消息。

这是我的 Dockerfile。为测试“phptest.php”安装设置和网页为了允许 phptest.php,我更改了默认文件和 init.sh

FROM    ubuntu
RUN     apt-get update && apt-get upgrade -y && \
        apt-get -y install \
        nginx \
        vim \
        php-fpm 
COPY    srcs/default /
COPY    srcs/phptest.php /
COPY    srcs/init.sh /
EXPOSE  80
CMD     bash init.sh

init.sh 在这里

rm /etc/nginx/sites-available/default
mv default /etc/nginx/sites-available/
mv phptest.php /var/www/html
chown -R www-data /var/www/*
chmod -R 755 /var/www/*
service nginx start
service php7.4-fpm start
bash

我上传了新任务,因为帖子问题不符合 stackoverflow 的指南

4

1 回答 1

1

Kubernetes 容器在大多数情况下无法运行交互式 shell,但这就是容器中的主要进程。(图像的CMD运行init.sh;它做了一些工作,包括启动一些辅助进程然后运行bashbash没有在 tty 上运行,因此它立即退出;所以容器也退出;并且由于它的容器处于启动和退出状态立即循环,pod 进入 CrashLoopBackOff 状态。)

您应该重新设计此设置,以便拥有两个单独的部署,一个运行 PHP 应用程序,一个运行 Nginx 反向代理。(以及类似的两个匹配服务。)每个都直接将这些进程作为它们的图像运行CMD(不要尝试使用service)。在将其转换回 Kubernetes 环境之前,您应该能够使用 Docker Compose 或其他轻量级工具测试类似的设置。

于 2020-11-19T11:26:49.197 回答