我是kubernetes的新手。最近,我成功地使用在线服务器管理kubernetes。但是,当我移到隔离区域(脱机服务器)时,无法部署kubectl映像。但是我所有的环境都运行良好,我陷入了困境。不同的只是互联网连接。
当前,我无法在离线服务器中部署kubernetes仪表板和一些映像。我的kubectl命令在离线服务器中的示例(我在在线服务器中下载了tar文件):
# docker load < nginx.tar
# kubectl create deployment test-nginx --image=nginx
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default test-nginx-7d97ffc85d-2s4lh 0/1 ImagePullBackOff 0 50s
kube-system coredns-6955765f44-2s54f 1/1 Running 1 26h
kube-system coredns-6955765f44-wmtq9 1/1 Running 1 26h
kube-system etcd-devkubeapp01 1/1 Running 1 26h
kube-system kube-apiserver-devkubeapp01 1/1 Running 1 26h
kube-system kube-controller-manager-devkubeapp01 1/1 Running 1 26h
kube-system kube-flannel-ds-amd64-czn8z 1/1 Running 0 26h
kube-system kube-flannel-ds-amd64-d58x4 1/1 Running 0 26h
kube-system kube-flannel-ds-amd64-z9w9x 1/1 Running 0 26h
kube-system kube-proxy-9wxj2 1/1 Running 0 26h
kube-system kube-proxy-mr76b 1/1 Running 1 26h
kube-system kube-proxy-w5pvm 1/1 Running 0 26h
kube-system kube-scheduler-devkubeapp01 1/1 Running 1 26h
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
devkubeapp01 Ready master 26h v1.17.2
devkubeapp02 Ready minion1 26h v1.17.2
devkubeapp03 Ready minion2 25h v1.17.2
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5ad3bd0e67a9 6 days ago 127MB
k8s.gcr.io/kube-proxy v1.17.2 cba2a99699bd 10 days ago 116MB
k8s.gcr.io/kube-apiserver v1.17.2 41ef50a5f06a 10 days ago 171MB
k8s.gcr.io/kube-controller-manager v1.17.2 da5fd66c4068 10 days ago 161MB
k8s.gcr.io/kube-scheduler v1.17.2 f52d4c527ef2 10 days ago 94.4MB
k8s.gcr.io/coredns 1.6.5 70f311871ae1 2 months ago 41.6MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 3 months ago 288MB
quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 12 months ago 52.6MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB
我的Pod无法正常运行,因此状态CreationContainer变为ImagePullBackOff(当我断开Internet连接时尝试在联机服务器中,状态是相同的=> ImagePullBackOff)。任何人都可以帮助解决这个问题? kubernetes是否支持离线环境来部署映像?
谢谢。
答案 0 :(得分:0)
正如我之前的评论中所述:
我怀疑您的
imagePullPolicy
可能配置错误。
,并由您提供的日志进一步证明:
来自服务器的错误(BadRequest):容器中的容器“ nginx” “ test-nginx-7d97ffc85d-2s4lh”正在等待启动:尝试并失败 拉图像
问题出在imagePullPolicy
configuration之内。
预拉图像
默认情况下,kubelet将尝试从指定的列表中提取每个图像 注册表。但是,如果容器的
imagePullPolicy
属性 设置为IfNotPresent
或Never
,然后使用本地图像 (分别为首选或专有)。如果您要依靠预拉映像代替注册表 身份验证,您必须确保集群中的所有节点都具有相同的 预拉图像。
因此,基本上,如@Eduardo所述,您需要确保所有节点上的映像都相同,并且imagePullPolicy
已正确配置。
但是,请确保容器始终使用相同版本的图像,您可以指定其digest,例如sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
。摘要唯一地标识了图像的特定版本,因此,除非您更改摘要值,否则Kubernetes永远不会更新该摘要。
通过这种方式,您可以避免将来出现问题,因为在这种情况下,保持图像群集的完全相同版本是最大的陷阱。
我希望这会有所帮助并扩展先前的答案(正确),并从一开始就证明我的观点。
答案 1 :(得分:-2)
在离线环境中,您需要在所有节点上预加载docker映像,并确保使用正确的imagePullPolicy
来防止Kubernetes下载容器映像。
您需要:
docker load < nginx.tar
在所有节点中imagePullPolicy
或IfNotPresent
(默认值为Never
的{{1}},这可能是您的问题)。