Как развернуть докер-контейнеры Windows в кластере Docker для рабочего стола Kubernetes?отказано в доступе - PullRequest
0 голосов
/ 20 февраля 2019

Я запускаю докер для рабочего стола с включенным kubernetes.Я использую контейнеры Windows (но также запускаю контейнеры Linux - я переключаю режимы на Windows).Кроме того, kubernetes работает, но использует Linux, поэтому я предполагаю, что один узел в кластере использует движок Linux, хотя я переключил Docker для использования контейнеров Windows.Похоже, что локальный кластер kubernetes не может загрузить образ Windows, даже если докер работает в режиме контейнера Windows.

Я пытаюсь устранить следующую ошибку:

Failed to pull image "iis-site": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iis-site, repository does not exist or may require 'docker login'

Шаги для воспроизведения

Я создаю образ докера следующим образом:

FROM microsoft/iis

RUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*

WORKDIR /inetpub/wwwroot

COPY content/ .

У меня есть структура каталогов, подобнаяэто:

D:\TEMP\IIS
│   Dockerfile
│
└───content
        index.html

index.html выглядит так:

<html>
    <body>
    Hello World!
    </body>
</html>

Я запускаю контейнер следующим образом:

docker build -t iis-site .

Я могу перейти к http://localhost:8000/ и я вижу свой сайт!(УСПЕХ)

См. Это в Kubernetes

Но теперь я хочу видеть, что это работает в kubernetes (локальный кластер).

Я делаю

kubectl apply -f D:\Temp\windows-deployment.yaml

D: \ Temp \ windows-deploy.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: iis-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: iis
    spec:
      containers:
      - name: iis
        image: iis-site
        ports:
        - containerPort: 80

Теперь id do:

kubectl get pods

NAME                                  READY     STATUS             RESTARTS   AGE
iis-deployment-5768b4fb85-pfxjk       0/1       ImagePullBackOff   0          18m
sql-deployment-659d64d464-rss5c       1/1       Running            18         40d
streact-deployment-567cf9db9b-g5vkb   1/1       Running            18         39d
web-deployment-669595758-7zcdx        1/1       Running            45         39d

Теперь я делаю

kubectl describe pod iis-deployment-5768b4fb85-pfxjk

Failed to pull image "iis-site": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iis-site, repository does not exist or may require 'docker login'

Дополнительная информация

kubectl describe node docker-for-desktop

Name:               docker-for-desktop
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/hostname=docker-for-desktop
                    node-role.kubernetes.io/master=
Annotations:        node.alpha.kubernetes.io/ttl=0
                    volumes.kubernetes.io/controller-managed-attach-detach=true
CreationTimestamp:  Fri, 11 Jan 2019 10:14:26 +0000
Taints:             <none>
Unschedulable:      false
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  OutOfDisk        False   Wed, 20 Feb 2019 16:32:37 +0000   Wed, 20 Feb 2019 10:06:38 +0000   KubeletHasSufficientDisk     kubelet has sufficient disk space available
  MemoryPressure   False   Wed, 20 Feb 2019 16:32:37 +0000   Wed, 20 Feb 2019 10:06:38 +0000   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Wed, 20 Feb 2019 16:32:37 +0000   Wed, 20 Feb 2019 10:06:38 +0000   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Wed, 20 Feb 2019 16:32:37 +0000   Fri, 11 Jan 2019 10:14:13 +0000   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Wed, 20 Feb 2019 16:32:37 +0000   Wed, 20 Feb 2019 10:06:38 +0000   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  192.168.65.3
  Hostname:    docker-for-desktop
Capacity:
 cpu:                2
 ephemeral-storage:  61664044Ki
 hugepages-2Mi:      0
 memory:             2540888Ki
 pods:               110
Allocatable:
 cpu:                2
 ephemeral-storage:  56829582857
 hugepages-2Mi:      0
 memory:             2438488Ki
 pods:               110
System Info:
 Machine ID:                 
 System UUID:                8776A14E-A225-4134-838E-B50A6ECAB276
 Boot ID:                    5a836f34-51a4-4adf-a32d-218a5df09b3c
 Kernel Version:             4.9.125-linuxkit
 OS Image:                   Docker for Windows
 Operating System:           linux
 Architecture:               amd64
 Container Runtime Version:  docker://18.9.2
 Kubelet Version:            v1.10.11
 Kube-Proxy Version:         v1.10.11
ExternalID:                  docker-for-desktop
Non-terminated Pods:         (12 in total)
  Namespace                  Name                                          CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                                          ------------  ----------  ---------------  -------------
  default                    iis-deployment-5768b4fb85-pfxjk               0 (0%)        0 (0%)      0 (0%)           0 (0%)
  default                    sql-deployment-659d64d464-rss5c               0 (0%)        0 (0%)      0 (0%)           0 (0%)
  default                    streact-deployment-567cf9db9b-g5vkb           0 (0%)        0 (0%)      0 (0%)           0 (0%)
  default                    web-deployment-669595758-7zcdx                0 (0%)        0 (0%)      0 (0%)           0 (0%)
  docker                     compose-74649b4db6-rm9zc                      0 (0%)        0 (0%)      0 (0%)           0 (0%)
  docker                     compose-api-fb7b8f78f-drllk                   0 (0%)        0 (0%)      0 (0%)           0 (0%)
  kube-system                etcd-docker-for-desktop                       0 (0%)        0 (0%)      0 (0%)           0 (0%)
  kube-system                kube-apiserver-docker-for-desktop             250m (12%)    0 (0%)      0 (0%)           0 (0%)
  kube-system                kube-controller-manager-docker-for-desktop    200m (10%)    0 (0%)      0 (0%)           0 (0%)
  kube-system                kube-dns-86f4d74b45-h2p5q                     260m (13%)    0 (0%)      110Mi (4%)       170Mi (7%)
  kube-system                kube-proxy-p8vj7                              0 (0%)        0 (0%)      0 (0%)           0 (0%)
  kube-system                kube-scheduler-docker-for-desktop             100m (5%)     0 (0%)      0 (0%)           0 (0%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  810m (40%)    0 (0%)      110Mi (4%)       170Mi (7%)
Events:         <none>

Примечание: Приведенные выше выходные данные указывают на следующее:

 Operating System:           linux

Таким образом, кажется, что, хотя механизм докера работает с контейнерами Windows, локальный кластер Kubernetes (плоскость управления) работаетLinux.

Я был бы очень признателен за любые идеи о том, как исправить вышеуказанную ошибку, например, pull-access denied , чтобы я мог запустить локальный кластер Kubernetes в Windows 10 с Windows контейнерами.

1 Ответ

0 голосов
/ 21 февраля 2019

Ошибка, которую вы видите, не связана с тем, может ли она работать или не может запускать контейнеры Windows, а потому, что она не может извлечь образ.Не похоже, что вы выдвинули изображение на докер-хаб .После того, как вы соберете его, вам нужно будет выполнить:

docker tag -t <yourdockerhubuser>/iis iis
docker push <yourdockerhubuser>/iis

. Вам нужно будет настроить свои учетные данные док-станции как ImagePullSecrets в своем развертывании.Затем на вашем развертывании K8s:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: iis-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: iis
    spec:
      containers:
      - name: <yourdockerhubuser>/iis
        image: iis-site
        ports:
        - containerPort: 80
     imagePullSecrets:
     - name: <your-docker-hub-user-secret>

Хорошо, этот контейнер не будет работать, потому что у вас Linux на вашем узле, поэтому вам нужно иметь узел Windows, и для этого у вас будет настроен kubelet на вашем компьютере с Windows.(Я считаю, что Docker для Windows не поддерживает Windows Kubelet, а просто Linux Kubelet, работающий в ВМ).

...