kubernetes - 如何将 Windows docker 容器部署到 docker-for-desktop Kubernetes 集群?拉取访问被拒绝

标签 kubernetes docker-for-windows docker

我正在运行 docker for desktop 并启用了 kubernetes。我正在使用 Windows 容器(但也一直在运行 Linux 容器 - 我将模式切换到 Windows)。另外,kubernetes 正在运行,但一直在使用 Linux,所以我猜集群中的单个节点使用的是 Linux 引擎,即使我已将 Docker 切换为使用 Windows 容器。即使 docker 在 Windows 容器模式下运行,本地 kubernetes 集群似乎也无法加载 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'

重现步骤

我构建一个docker镜像如下:

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-deployment.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

现在我做:

kubectl 获取 pod
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

因此,即使 docker 引擎运行 Windows 容器,本地 Kubernetes 集群(控制平面)似乎也在运行 Linux。

我将不胜感激有关如何修复上述错误的任何想法,即 拉取访问被拒绝 这样我就可以使用 在 Windows 10 上运行本地 Kubernetes 集群 window 容器。

最佳答案

您看到的错误与它是否可以运行 Windows 容器无关,这是因为它无法提取镜像。您好像没有将图片推送到 docker hub .构建后,您需要运行:

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

您需要将 docker hub 凭据设置为 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 节点,为此,您将拥有 set up the kubelet在您的 Windows 机器上。 (我相信 Docker for Windows 不支持 Windows kubelet,只支持在 VM 中运行的 Linux kubelet)。

关于kubernetes - 如何将 Windows docker 容器部署到 docker-for-desktop Kubernetes 集群?拉取访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54791214/

相关文章:

kubernetes - Ansible剧本等到所有Pod都在运行

Docker IBM Websphere Base 9 for windows - 管理控制台不工作(Windows 10 上的 Docker)

docker - Kubernetes 集群不会将外部 ip 公开为 <nodes>

google-compute-engine - 为什么我无法安装 Google Heapster Kubernetes 插件?

java - spring boot + docker + kubernetes

docker无法使用系统代理

docker - 如何修复类型 "bind": source path must be a directory in Windows docker Container? 的无效挂载配置

docker - 在 Docker 中添加或复制文件夹

docker - 如何在 Helm 图表中配置 docker 入口点

docker - 如何在正在运行的Docker容器中覆盖环境变量