Как указать версию Windows для хост-узла для контейнеров Windows Server в службе Azure Kubernetes?

Я следую руководству по созданию контейнеров Windows Server в службе Azure Kubernetes. Ссылка

Я вытащил образец образа (mcr.microsoft.com/dotnet/framework/samples:aspnetapp), показанный в руководстве, пометил его и загрузил в реестр контейнеров Azure. После развертывания приложения в Kubernetes модули не могут получить образ из реестра контейнеров. Я также пытался использовать исходный образ из концентратора Docker, что привело к той же проблеме.

Ниже приведен вывод команды kubectl describe на одном из модулей.

Name:               hello-world-56c76d8549-7248k
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               aksnpwin000000/10.240.0.35
Start Time:         Sat, 01 Jun 2019 19:33:21 +0530
Labels:             app=hello-world
                    pod-template-hash=56c76d8549
Annotations:        <none>
Status:             Pending
IP:                 10.240.0.47
Controlled By:      ReplicaSet/hello-world-56c76d8549
Containers:
  hello-world:
    Container ID:
    Image:          pocaspnetcoreweb.azurecr.io/pocaspnetcoreweb:v1
    Image ID:
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  800m
    Requests:
      cpu:        100m
      memory:     300m
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-m647n (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-m647n:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-m647n
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  beta.kubernetes.io/os=windows
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason          Age                   From                     Message
  ----     ------          ----                  ----                     -------
  Normal   Scheduled       18m                   default-scheduler        Successfully assigned default/hello-world-56c76d8549-7248k to aksnpwin000000
  Normal   SandboxChanged  17m                   kubelet, aksnpwin000000  Pod sandbox changed, it will be killed and re-created.
  Warning  Failed          17m (x3 over 17m)     kubelet, aksnpwin000000  Failed to pull image "pocaspnetcoreweb.azurecr.io/pocaspnetcoreweb:v1": [rpc error: code = Unknown desc = a Windows version 10.0.18362-based image is incompatible with a 10.0.17763 host, rpc error: code = Unknown desc = Error response from daemon: Get https://pocaspnetcoreweb.azurecr.io/v2/pocaspnetcoreweb/manifests/v1: unauthorized: authentication required]
  Normal   Pulling         16m (x4 over 17m)     kubelet, aksnpwin000000  Pulling image "pocaspnetcoreweb.azurecr.io/pocaspnetcoreweb:v1"
  Warning  Failed          2m55s (x65 over 17m)  kubelet, aksnpwin000000  Error: ImagePullBackOff

В разделе События есть событие с сообщением

Warning  Failed          17m (x3 over 17m)     kubelet, aksnpwin000000  Failed to pull image "pocaspnetcoreweb.azurecr.io/pocaspnetcoreweb:v1": [rpc error: code = Unknown desc = a Windows version 10.0.18362-based image is incompatible with a 10.0.17763 host, rpc error: code = Unknown desc = Error response from daemon: Get https://pocaspnetcoreweb.azurecr.io/v2/pocaspnetcoreweb/manifests/v1: unauthorized: authentication required]

Сообщение кажется мне достаточно ясным, поскольку оно жалуется на несоответствие версии Windows между контейнером и хостом.

Мой файл развертывания kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world
  labels:
    app: hello-world
spec:
  replicas: 1
  template:
    metadata:
      name: hello-world
      labels:
        app: hello-world
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": windows
      containers:
      - name: hello-world
        image: pocaspnetcoreweb.azurecr.io/pocaspnetcoreweb:v1
        resources:
          limits:
            cpu: 1
            memory: 800m
          requests:
            cpu: .1
            memory: 300m
        ports:
          - containerPort: 80
      imagePullSecrets:
      - name: acr-auth
  selector:
    matchLabels:
      app: hello-world
---
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
  selector:
    app: sample

Как убедиться, что версия Windows совпадает между контейнером и хостом? Можно ли как-то указать версию Windows, которая будет использоваться на хосте?


person dr0pdb    schedule 03.06.2019    source источник
comment
Похоже, ошибка показывает две проблемы: одна из них заключается в том, что версия базового образа несовместима с вашим узлом Windows. Попробуйте использовать базовый образ версии 10.0.17763. Другим является аутентификация вашего образа из ACR. Возьмите чек.   -  person Charles Xu    schedule 03.06.2019
comment
Извлеките определенный тег, иначе он попытается сопоставить вашу рабочую станцию ​​​​разработчика. Так что потяните mcr.microsoft.com/dotnet/framework/samples:aspnetapp:aspnetapp-windowsservercore-ltsc2019 вместо этого. Также ваше сообщение об ошибке жалуется на сбой аутентификации на несоответствие версии вашего CR.   -  person Gregory Suvalian    schedule 03.06.2019
comment
Да, вытягивание определенного тега было решением проблемы. Также после того, как я правильно вытащил конкретный тег, вторая ошибка аутентификации исчезла. Спасибо за вашу помощь!   -  person dr0pdb    schedule 04.06.2019


Ответы (1)


нет, вы не можете этого сделать (а если подумать - нет смысла, как вы динамически меняете версию Windows на хосте???). Должно быть наоборот, найдите образ (или создайте образ) с соответствующей базовой версией Windows хоста.

https://hub.docker.com/_/microsoft-dotnet-framework-samples/

person 4c74356b41    schedule 03.06.2019
comment
Благодарю вас! Мне удалось успешно выполнить развертывание с помощью образа mcr.microsoft.com/dotnet/framework/samples:aspnetapp-windowsservercore-ltsc2019. - person dr0pdb; 04.06.2019