2017-05-14 73 views
1

我很新的Kubernetes和我设置Kubernetes注册插件只需要复制与emptyDir为什么拉在Pod中的私人图像不工作在Kubernetes注册表插件?

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: kube-registry-v0 
    namespace: kube-system 
    labels: 
    k8s-app: kube-registry-upstream 
    version: v0 
    kubernetes.io/cluster-service: "true" 
spec: 
    replicas: 1 
    selector: 
    k8s-app: kube-registry-upstream 
    version: v0 
    template: 
    metadata: 
     labels: 
     k8s-app: kube-registry-upstream 
     version: v0 
     kubernetes.io/cluster-service: "true" 
    spec: 
     containers: 
     - name: registry 
     image: registry:2 
     resources: 
      limits: 
      cpu: 100m 
      memory: 100Mi 
     env: 
     - name: REGISTRY_HTTP_ADDR 
      value: :5000 
     - name: REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY 
      value: /var/lib/registry 
     volumeMounts: 
     - name: image-store 
      mountPath: /var/lib/registry 
     ports: 
     - containerPort: 5000 
      name: registry 
      protocol: TCP 
     volumes: 
     - name: image-store 
     emptyDir: {} 

粘贴从Kubernetes Registry Addon只是ReplicationController一个小变化YAML然后我转发5000端口如下

$POD=$(kubectl get pods --namespace kube-system -l k8s-app=kube-registry-upstream \ 
      -o template --template '{{range .items}}{{.metadata.name}} {{.status.phase}}{{"\n"}}{{end}}' \ 
      | grep Running | head -1 | cut -f1 -d' ') 


$kubectl port-forward --namespace kube-system $POD 5000:5000 & 

我可以把我的图片罚款如下

$docker tag alpine localhost:5000/nurrony/alpine 
$docker push localhost:5000/nurrony/alpine 

然后我写了一个吊舱,以测试它像下面

Version: v1 
kind: Pod 
metadata: 
    name: registry-demo 
    labels: 
    purpose: registry-demo 
spec: 
    containers: 
    - name: registry-demo-container 
     image: localhost:5000/nurrony/alpine 
     command: ["printenv"] 
     args: ["HOSTNAME", "KUBERNETES_PORT"] 
     env: 
     - name: MESSAGE 
     value: "hello world" 
     command: ["/bin/echo"] 
     args: ["$(MESSAGE)"] 

它抛出一个错误

Failed to pull image "localhost:5000/nurrony/alpine": image pull failed for localhost:5000/nurrony/alpine:latest, this may be because there are no credentials on this request. details: (net/http: request canceled) 

任何想法,为什么会出现这种情况?提前致谢。

回答

0

很可能您的代理无法正常工作。

Docker注册表K8S插件附带DaemonSet,它定义了每个节点的注册表代理,用于标识您的kubelets。我建议你检查那些代理,因为他们会在每个节点上将Docker Registry(K8S)服务映射到localhost:5000。

请注意,即使您的注册表代理上有绿色复选标记,但这并不意味着它们可以正常工作。打开它们的日志并确保一切正常。

如果您的代理已配置并且仍然出现此错误,那么kube-registry-proxy中最有可能的环境变量REGISTRY_HOST是错误的。您是否像使用示例一样使用DNS?正确配置您的DNS吗?如果你把这个变量放到你的服务的ClusterIP上,它工作吗?

此外,请注意您的RC标签需要与SVC选择器匹配,否则服务无法发现您的Pod。

希望它有帮助。

相关问题