Kubernetes没有创建docker容器

时间:2018-07-12 17:57:01

标签: docker kubernetes

我真的很难调试它,可以使用一些帮助。我正在使用有效的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 psdocker 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" ]

2 个答案:

答案 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

您会看到其中有一些容器,包括您要寻找的容器。