我真的很难调试它,可以使用一些帮助。我正在使用有效的docker映像成功启动kubernetes服务和部署。
我的服务文件:
apiVersion: v1
kind: Service
metadata:
name: auth-svc
labels:
app: auth_v1
spec:
type: NodePort
ports:
- port: 3000
nodePort: 30000
protocol: TCP
selector:
app: auth_v1
部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-deploy
labels:
app: auth_v1
spec:
revisionHistoryLimit: 5
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
replicas: 3
selector:
matchLabels:
app: auth_v1
template:
metadata:
labels:
app: auth_v1
spec:
containers:
- name: auth-pod
image: index.docker.io/XXX/auth
command: [ "yarn", "start-staging" ]
imagePullPolicy: Always
ports:
- containerPort: 3000
imagePullSecrets:
- name: myregistrykey
kubectl get pods
显示Pod已启动并正在运行。我已经测试了使用shell跳入pod / conatiner的过程,并尝试运行我的应用程序,并且它可以工作。运行kubectl describe auth-deploy
时,我看到一个列为auth-pod的容器。但是,运行docker ps
或docker ps -a
时没有看到任何容器。另外,我的广告连播的日志也什么也没有显示。我在做错什么吗?
作为参考,这是我的Dockerfile:
FROM node:8.11.2-alpine AS build
LABEL maintainer="info@XXX.com"
# Copy Root Dir & Set Working Dir
COPY . /src
WORKDIR /src
# Build & Start Our App
RUN apk update
RUN apk add --update alpine-sdk
RUN apk add --update python
RUN yarn install
RUN yarn build-staging
# Build Production Image Using Node Container
FROM node:8.11.2-alpine AS production
# Copy Build to Image
COPY --from=build /src/.next /src/.next/
COPY --from=build /src/production-server /src/production-server/
COPY --from=build /src/static /src/static/
COPY --from=build /src/package.json /src
WORKDIR /src
# Install Essential Pacakges & Start App
RUN apk update
RUN apk add --update alpine-sdk
RUN apk add --update python
RUN yarn install
# Expose Ports Needed
EXPOSE 3000
VOLUME [ "/src/log" ]
# Start App
CMD [ "yarn", "start-staging" ]
答案 0 :(得分:3)
您是否有可能在K8s-master上运行docker ps
,而不是Pod所在的位置?
您可以通过运行以下命令来了解Pod的运行位置:
$ kubectl describe pod auth-deploy
它应该返回类似于以下内容(在我的情况下,这是percona工作负载):
$ kubectl describe pod percona
Name: percona-b98f87dbd-svq64
Namespace: default
Node: ip-xxx-xx-x-xxx.us-west-2.compute.internal/xxx.xx.x.xxx
获取IP,通过SSH进入节点,然后从容器所在的节点本地运行docker ps
。
$ docker ps | grep percona
010f3d529c55 percona "docker-entrypoint.s…" 7 minutes ago Up 7 minutes k8s_percona_percona-b98f87dbd-svq64_default_4aa2fe83-861a-11e8-9d5f-061181005f56_0
616d70e010bc k8s.gcr.io/pause-amd64:3.1 "/pause" 8 minutes ago Up 7 minutes k8s_POD_percona-b98f87dbd-svq64_default_4aa2fe83-861a-11e8-9d5f-061181005f56_0
另一种可能性是您可能使用了rkt,containerd和lxd等不同的容器运行时代替docker。
答案 1 :(得分:1)
Kubernetes pods由分组的容器组成,并在专用节点上运行。
Kubernetes正在管理创建Pod和 他们的生命周期。 Kubernetes配置由工作节点和主服务器组成。 主服务器能够连接到节点,创建容器, 并将它们绑成豆荚。主节点设计为仅运行管理命令,例如kubectl,集群状态数据库etcd, 和其他守护程序需要保持集群正常运行。
docker ps
在这种情况下什么也不显示。
要获取正在运行的Pod列表:
kubectl get pods
然后您可以连接到已经在节点上运行的pod:
kubectl attach -i <podname>
回到您的问题。
如果您对Kubernetes如何使用容器(包括应用程序映像和Kubernetes基础架构)感兴趣, 您必须先获取节点的IP地址:
kubectl describe pod <podname> | grep ^Node:
或通过:
kubectl get pods -o wide
下一步,通过ssh连接到该节点,然后:
docker ps
您会看到其中有一些容器,包括您要寻找的容器。