2017-09-15 110 views
0

我正在使用一个脱机群集(机器没有互联网访问),使用ansible和docker组合脚本部署docker图像。 我的服务器是Centos7。 我在机器上建立了一个不安全的码头注册表。我们将改变环境,并且我正在安装kubernetes以管理我的容器拉动。Kubernet无法从不安全的注册表中获取答案,无法在离线群集上从本地映像运行容器

我按照本指南安装kubernetes: https://severalnines.com/blog/installing-kubernetes-cluster-minions-centos7-manage-pods-services

安装后,我试图推出一个测试吊舱。这里是荚的YML,与

kubectl -f create nginx.yml 

这里的YML推出:

apiVersion: v1 
    kind: Pod 
    metadata: 
     name: nginx 
    spec: 
     containers: 
     - name: nginx 
     image: [my_registry_addr]:[my_registry_port]/nginx:v1 

     ports: 
     - containerPort: 80 

我用kubectl描述得到什么是错的更多信息:

Name:  nginx 
    Namespace: default 
    Node:  [my node] 
    Start Time: Fri, 15 Sep 2017 11:29:05 +0200 
    Labels:  <none> 
    Status:  Pending 
    IP:  
    Controllers: <none> 
    Containers: 
     nginx: 
     Container ID:  
     Image:   [my_registry_addr]:[my_registry_port]/nginx:v1 
     Image ID:   
     Port:   80/TCP 
     State:   Waiting 
      Reason:   ContainerCreating 
     Ready:   False 
     Restart Count:  0 
     Volume Mounts:  <none> 
     Environment Variables: <none> 
    Conditions: 
     Type  Status 
     Initialized True 
     Ready  False 
     PodScheduled True 
    No volumes. 
    QoS Class: BestEffort 
    Tolerations: <none> 
    Events: 
     FirstSeen LastSeen Count From    SubObjectPath   Type  Reason  Message 
     --------- -------- ----- ----    ------------- -------- ------  ------- 
     2m  2m  1 {default-scheduler }    Normal  Scheduled Successfully assigned nginx to [my kubernet node] 
     1m  1m  2 {kubelet [my kubernet node]}   Warning  FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/library/[my_registry_addr]/images: dial tcp: lookup index.docker.io on [kubernet_master_ip]:53: server misbehaving" 

     54s 54s 1 {kubelet [my kubernet node]}  Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"[my_registry_addr]:[my_registry_port]\"" 

     8s 8s 1 {kubelet [my kubernet node]}  Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/[my_registry_addr]/images. You may want to check your internet connection or if you are behind a proxy." 

然后,我去我的节点和使用journalctl -xe

sept. 15 11:22:02 [my_node_ip] dockerd-current[9861]: time="2017-09-15T11:22:02.350930396+02:00" level=info msg="{Action=create, LoginUID=4294967295, PID=11555}" 
    sept. 15 11:22:17 [my_node_ip] dockerd-current[9861]: time="2017-09-15T11:22:17.351536727+02:00" level=warning msg="Error getting v2 registry: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)" 
    sept. 15 11:22:17 [my_node_ip] dockerd-current[9861]: time="2017-09-15T11:22:17.351606330+02:00" level=error msg="Attempting next endpoint for pull after error: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)" 
    sept. 15 11:22:32 [my_node_ip] dockerd-current[9861]: time="2017-09-15T11:22:32.353946452+02:00" level=error msg="Not continuing with pull after error: Error while pulling image: Get https://index.docker.io/v1/repositories/library/[my_registry_ip]/images: dial tcp: lookup index.docker.io on [kubernet_master_ip]:53: server misbehaving" 
    sept. 15 11:22:32 [my_node_ip] kubelet[11555]: E0915 11:22:32.354309 11555 docker_manager.go:2161] Failed to create pod infra container: ErrImagePull; Skipping pod "nginx_default(8b5c40e5-99f4-11e7-98db-f8bc12456ee4)": Error while pulling image: Get https://index.docker.io/v1/repositories/library/[my_registry_ip]/images: dial tcp: lookup index.docker.io on [kubernet_master_ip]:53: server misbehaving 
    sept. 15 11:22:32 [my_node_ip] kubelet[11555]: E0915 11:22:32.354390 11555 pod_workers.go:184] Error syncing pod 8b5c40e5-99f4-11e7-98db-f8bc12456ee4, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "Error while pulling image: Get https://index.docker.io/v1/repositories/library/[my_registry_ip]/images: dial tcp: lookup index.docker.io on [kubernet_master_ip]:53: server misbehaving" 
    sept. 15 11:22:44 [my_node_ip] dockerd-current[9861]: time="2017-09-15T11:22:44.350708175+02:00" level=error msg="Handler for GET /v1.24/images/[my_registry_ip]:[my_registry_port]/json returned error: No such image: [my_registry_ip]:[my_registry_port]" 

我确定我的码头配置是好的,因为我每天都用ansible或mesos来使用它。

码头工人的版本是1.12.6,kubernet版本1.5.2

是别人有什么我可以现在做的一些见解?我没有发现这种用法的任何配置密钥。

当我看到拉动失败时,我手动拉动所有节点上的图像。我把一个标签,以确保kubernetes会尽量拉为默认值,并设置“imagePullPolicy:IfNotPresent”

+0

是否使用auth或不使用私人注册表?也请看看这是否有帮助https://blog.cloudhelix.io/using-a-private-docker-registry-with-kubernetes-f8d5f6b8f646 –

+0

它似乎Kubernetes不知道如何从您的私人注册表中拉图像看到https ://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/和https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry –

+0

它是没有身份验证的注册表。这是不安全的,使用http。我在我的节点上编辑daemon.json文件以允许它们从注册表中拉出。 –

回答

0

的语法用于指定泊坞窗图像:

[docker_registry]/[image_name]:[image_tag] 

在你的manifest文件中,有使用“:”来分隔docker存储库主机和存储库正在监听的端口。对于搬运工人私人注册表我猜的默认端口是5000。 所以从

Image:   [my_registry_addr]:[my_registry_port]/nginx:v1 

改变你的形象声明

Image:   [my_registry_addr]/nginx:v1 

此外,通过做检查从工作节点的网络连接到您的码头工人注册表一个平。

ping [my_registry_addr] 

如果你仍然想检查443端口被打开的注册表中,你可以在主机上运行的泊坞窗注册表

curl telnet://[my_registry_addr]:443 

希望帮助做一个tcp检查该端口上。

+0

我的注册表不安全,使用http进行配置。图像标签和拉是好的,我可以拉和推使用码头的指令。如果我只使用服务器地址进行标记,则docker不能再与他联系(导致我的注册表在daemon.json文件中用[addr:port]定义)。 443端口联系失败,但我想这是正常的,我没有任何服务在该端口。 –

+0

但问题不仅在于,因为当我使用本地呈现在我所有节点上的图像“nginx:v1”时,kubernet仍然无法实现它。 –

0

我终于找到了什么问题。

要工作,Kubernetes需要一个暂停容器。 Kubernetes试图在互联网上找到暂停容器。

我在我的注册表中部署了一个自定义暂停容器,我为此图像设置了kubernetes暂停容器。

之后,kubernetes像一个魅力工作。

相关问题