在启动Kubernetes集群时,我将etcd加上核心kubernetes进程-kube-代理、kube-apiserver、kube-控制器-管理器、kube-调度程序-作为静态程序从私有注册中心加载。过去,通过确保对kubelet将$HOME环境变量设置为"/root“,然后使用专用码头注册中心的凭据定义/root/. docker /config.json,这是行之有效的。
当试图运行Kubernetes 1.6 (启用CRI )时,我在kubelet日志中看到错误,表示由于没有身份验证,它无法从我的私人坞注册中心中提取暂停:3.0容器。
在kubelet命令行上设置-启用- CRI =false可以工作,但是当启用CRI时,它似乎不使用/root/..docker/config文件进行身份验证。
在启用CRI的情况下,是否有新的方法来提供加载静态吊舱所需的码头凭证?
发布于 2017-05-15 18:45:01
结果表明,Kubernetes 1.6的CRI能力存在缺陷。对于CRI,“暂停”容器(现在称为"Pod Sandbox Image“)被视为特例,因为不管您是否需要它,它都是容器运行时的”实现细节“。例如,在1.6版中,应用于其他容器的凭据,例如/root/..docker/config.json,在试图提取Pod Sandbox映像时不使用。
因此,如果您试图从私有注册表中提取此图像,则CRI逻辑不会将凭据与拉请求关联起来。现在有一个针对1.7的Kubernetes问题(#45738)来解决这个问题。
同时,一个简单的解决方法是在启动kubelet进程之前将“暂停”容器预拉到节点的本地停靠器图像缓存中。
发布于 2017-05-09 10:24:25
在1.6中,我设法使它与https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod中的以下菜谱一起工作
$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL您需要在imagePullSecrets规范的字段下指定新创建的myregistrykey作为凭证。
apiVersion: v1
kind: Pod
metadata:
name: foo
namespace: awesomeapps
spec:
containers:
- name: foo
image: janedoe/awesomeapp:v1
imagePullSecrets:
- name: myregistrykeyhttps://stackoverflow.com/questions/43860346
复制相似问题