0

请阅读更新 2

我有一个非常简单的 EventHubClient 应用程序。它只会收听 EventHub 消息。

我让它在 Visual Studio 2017(Linux 容器)中提供的 Docker 支持下运行。

但是当我尝试在 Kubernetes 中部署它时,我得到“Back-off restarting failed container”

C#代码:

public static void Main(string[] args)
{
    // Init Mapper
    AutoMapper.Mapper.Initialize(cfg =>
    {
        cfg.AddProfile<AiElementProfile>();
    });

    Console.WriteLine("Registering EventProcessor...");

    var eventProcessorHost = new EventProcessorHost(
        EventHubPath,
        ConsumerGroupName,
        EventHubConnectionString,
        AzureStorageConnectionString,
        ContainerName
    );

    // Registers the Event Processor Host and starts receiving messages
    eventProcessorHost.RegisterEventProcessorAsync<EventProcessor>();

    Console.WriteLine("Receiving. Press ENTER to stop worker.");
    Console.ReadLine();
}

Kubernetes 清单文件 (.yaml):

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: historysvc-deployment
spec:
  selector:
    matchLabels:
      app: historysvc
  replicas: 2
  template:
    metadata:
      labels:
        app: historysvc
    spec:
      containers:
      - name: historysvc
        image: vncont.azurecr.io/historysvc:v1
        ports:
        - containerPort: 80
      imagePullSecrets:
        - name: acr-auth

kubectl 获取 pod:

   NAME                                     READY     STATUS             RESTARTS   AGE
    historysvc-deployment-558fc5649f-bln8f   0/1       CrashLoopBackOff   17         1h
    historysvc-deployment-558fc5649f-jgjvq   0/1       CrashLoopBackOff   17         1h

kubectl 描述 pod historysvc-deployment-558fc5649f-bln8f

Name:           historysvc-deployment-558fc5649f-bln8f
Namespace:      default
Node:           aks-nodepool1-81522366-0/10.240.0.4
Start Time:     Tue, 24 Jul 2018 10:15:37 +0200
Labels:         app=historysvc
                pod-template-hash=1149712059
Annotations:    <none>
Status:         Running
IP:             10.244.0.11
Controlled By:  ReplicaSet/historysvc-deployment-558fc5649f
Containers:
  historysvc:
    Container ID:   docker://59e66f1e6420146f6eca4f19e2801a4ee0435a34c7ac555a8d04f699a1497f35
    Image:          vncont.azurecr.io/historysvc:v1
    Image ID:       docker-pullable://vncont.azurecr.io/historysvc@sha256:636d81435bd421ec92a0b079c3841cbeb3ad410509a6e37b1ec673dc4ab8a444
    Port:           80/TCP
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 24 Jul 2018 10:17:10 +0200
      Finished:     Tue, 24 Jul 2018 10:17:10 +0200
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Tue, 24 Jul 2018 10:16:29 +0200
      Finished:     Tue, 24 Jul 2018 10:16:29 +0200
    Ready:          False
    Restart Count:  4
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mt8mm (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          False
  PodScheduled   True
Volumes:
  default-token-mt8mm:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-mt8mm
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason                 Age              From                               Message
  ----     ------                 ----             ----                               -------
  Normal   Scheduled              1m               default-scheduler                  Successfully assigned historysvc-deployment-558fc5649f-bln8f to aks-nodepool1-81522366-0
  Normal   SuccessfulMountVolume  1m               kubelet, aks-nodepool1-81522366-0  MountVolume.SetUp succeeded for volume "default-token-mt8mm"
  Normal   Pulled                 8s (x5 over 1m)  kubelet, aks-nodepool1-81522366-0  Container image "vncont.azurecr.io/historysvc:v1" already present on machine
  Normal   Created                7s (x5 over 1m)  kubelet, aks-nodepool1-81522366-0  Created container
  Normal   Started                6s (x5 over 1m)  kubelet, aks-nodepool1-81522366-0  Started container
  Warning  BackOff                6s (x8 over 1m)  kubelet, aks-nodepool1-81522366-0  Back-off restarting failed container

我错过了什么?


更新 1

kubectl 描述 pod historysvc-deployment-558fc5649f-jgjvq

Name:           historysvc-deployment-558fc5649f-jgjvq
Namespace:      default
Node:           aks-nodepool1-81522366-0/10.240.0.4
Start Time:     Tue, 24 Jul 2018 10:15:37 +0200
Labels:         app=historysvc
                pod-template-hash=1149712059
Annotations:    <none>
Status:         Running
IP:             10.244.0.12
Controlled By:  ReplicaSet/historysvc-deployment-558fc5649f
Containers:
  historysvc:
    Container ID:   docker://ccf83bce216276450ed79d67fb4f8a66daa54cd424461762478ec62f7e592e30
    Image:          vncont.azurecr.io/historysvc:v1
    Image ID:       docker-pullable://vncont.azurecr.io/historysvc@sha256:636d81435bd421ec92a0b079c3841cbeb3ad410509a6e37b1ec673dc4ab8a444
    Port:           80/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 25 Jul 2018 09:32:34 +0200
      Finished:     Wed, 25 Jul 2018 09:32:35 +0200
    Ready:          False
    Restart Count:  277
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mt8mm (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          False
  PodScheduled   True
Volumes:
  default-token-mt8mm:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-mt8mm
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason   Age                  From                               Message
  ----     ------   ----                 ----                               -------
  Warning  BackOff  2m (x6238 over 23h)  kubelet, aks-nodepool1-81522366-0  Back-off restarting failed container

更新 2

当我在本地运行它时:

docker run <image> 

它立即结束(忽略读取行)(完成),这似乎是问题所在。

我必须写

docker run -it <image> 

-it 最后让它执行读取行。

Kubernetes 是如何运行 docker 镜像的?我在哪里可以设置?

4

1 回答 1

3

这可以通过附加一个参数来运行你的deployment.

在您的情况下,Kubernetes 清单文件 (.yaml)应如下所示:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: historysvc-deployment
spec:
  selector:
matchLabels:
  app: historysvc
  replicas: 2
  template:
metadata:
  labels:
    app: historysvc
spec:
  containers:
  - name: historysvc
    image: vncont.azurecr.io/historysvc:v1
    ports:
    - containerPort: 80
    args: ["-it"]
  imagePullSecrets:
    - name: acr-auth

您可以在 k8s 文档inject-data-application/define-command-argument-container中找到解释

创建 Pod 时,您可以为在 Pod 中运行的容器定义命令和参数。要定义命令,请 command 在配置文件中包含该字段。要为命令定义参数,请 args 在配置文件中包含该字段。您定义的命令和参数在 Pod 创建后无法更改。

您在配置文件中定义的命令和参数会覆盖容器映像提供的默认命令和参数。如果您定义 args 但未定义命令,则默认命令将与您的新参数一起使用。

于 2018-07-25T14:33:40.557 回答