如何在 kubernetes 上部署镜像后诊断服务

How to diagnose service after image deployment on kubernetes

我正在使用以下脚本将新映像部署到 kubernetes 集群:

#!/usr/bin/env bash

set -euo pipefail
set -x

rootPath=".."
gcpProjectId="example123"
gcpRepoHostname="eu.gcr.io"
imageName="wordpress"
containerName="wordpress"
tagNameSuffix=$(date +%s)
tagNameSuffix="deploy-${tagNameSuffix}"
tagName="$gcpRepoHostname"/"$gcpProjectId"/"$imageName":$tagNameSuffix

echo "$GCLOUD_API_KEYFILE" | base64 --decode --ignore-garbage > ./gcloud-api-key.json
gcloud auth activate-service-account --key-file gcloud-api-key.json
gcloud config set project "$gcpProjectId"

sudo docker build "$rootPath"/wordpress/ -t "$tagName"
sudo gcloud docker -- push "$tagName"
kubectl set image deployment/wordpress "$containerName"="$tagName"

奇怪的是,当我将 wordpress/Dockerfile 修改为:

时,它起作用了
FROM rlesouef/alpine-nginx

如果我把它改成:

FROM wordpress:php7.1-fpm-alpine

COPY custom-entrypoint.sh /usr/local/bin/

我得到一个无响应的服务 - 无法连接到外部 ip。


这里是一些与上次更改相关的调试信息(wordpress 图片):

kubectl get pods 显示以下内容:

NAME                        READY     STATUS    RESTARTS   AGE
wordpress-702001878-xb0b1   2/2       Running   0          8m

如果我通过 kubectl logs wordpress-702001878-xb0b1 wordpress 检查日志:

[07-Aug-2017 15:13:14] NOTICE: fpm is running, pid 1
[07-Aug-2017 15:13:14] NOTICE: ready to handle connections

如何诊断此问题?我想我需要确定集群上当前 运行 的确切 docker 图像 / pods.

kubectl get pods

记下 pod 名称。

然后执行到 pod 中: kubectl exec -c wordpress -it wordpress-915256023-g68cr -- bash

然后我能够确定容器正在侦听端口 9000(通过 运行 netstat -l)。这让我意识到这不是 HTTP 服务器,而是 PHP-FPM(所以是其他形式的服务器)。