Как указать версию 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, которая будет использоваться на хосте?
1 ответ
Нет , вы не можете этого сделать (и если вы думаете об этом - не имеет смысла, как вы динамически меняете версию windows на хосте???). Это должно быть наоборот, найти изображение (или построить изображение) с правильной базовой версией хоста Windows.
https://hub.docker.com/_/microsoft-dotnet-framework-samples/