docker - .NET Core Docker Container在Kubernetes中不起作用

标签 docker kubernetes .net-core visual-studio-2017 azure-kubernetes

请阅读更新2

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

我使用Visual Studio 2017(Linux容器)中提供的Docker支持使其运行。

但是,当我尝试在Kubernetes中部署它时,出现了“重启重启失败的容器”

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 list 文件(.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获取广告连播:
   NAME                                     READY     STATUS             RESTARTS   AGE
    historysvc-deployment-558fc5649f-bln8f   0/1       CrashLoopBackOff   17         1h
    historysvc-deployment-558fc5649f-jgjvq   0/1       CrashLoopBackOff   17         1h

kubectl描述广告连播历史记录vc-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描述广告连播历史记录vc-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> 

-在最后执行读取行。

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

最佳答案

这可以通过附加一个与deployment一起运行的参数来完成。
在您的情况下, Kubernetes list 文件(.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中找到解释的内容

When you create a Pod, you can define a command and arguments for the containers that run in the Pod. To define a command, include the command field in the configuration file. To define arguments for the command, include the args field in the configuration file. The command and arguments that you define cannot be changed after the Pod is created.

The command and arguments that you define in the configuration file override the default command and arguments provided by the container image. If you define args, but do not define a command, the default command is used with your new arguments.

关于docker - .NET Core Docker Container在Kubernetes中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51495149/

相关文章:

node.js - 无法在 docker 容器中列出 pm2

bash - 在bash脚本中将值传递给标志

azure - 从其他虚拟机检查 kubernetes pod 名称

c# - 错误 NETSDK1004 未找到 Assets 文件 project.assets.json 和错误 MSB4036 未找到 "GetReferenceNearestTargetFrameworkTask"任务

.net-core - .Net Core RabbitMQ/Masstransit 同一应用程序中每个可配置线程数有一个消费者

linux - 仅用于开发的 Docker

docker - Dockerfile VOLUME 指令创建什么类型的卷?

docker - Kubernetes - 使用名称而不是 'localhost' 的 pod 内的容器通信?

c# - 如何使用 StreamReader.ReadAsync(Memory<Char>, CancellationToken)

python - 在 Ubuntu 16.04 中设置 PYTHONPATH 以使 Docker 镜像正常运行