临时方案(不推荐)
我在使用KubeSphere创建有状态副本集的时候,选择需要部署的容器mysql,就显示镜像不存在(当让不止mysql、所有的镜像都找不到),如下图:
后来我在看ks-apiserver这个deployment的时候,看到对应容器的日志:
它这里访问dockerhub的网址去寻找镜像,但是由10.96.0.10的DNS服务器去解析,但是解析不了。
并且我还发现:能访问外界ip就是访问不了域名。
这立马就能想到是DNS域名解析的问题。
DNS配置在pod的容器的/etc/resolv.conf文件中,所以只要在/etc/resolv.conf临时配置一个nameserver就行了,如下所示:
但是k8s跑了很多pod,每一个pod中跑了若干个容器,我们这样一个一个修改肯定不行,治标不治本。
推荐方案
内部域名,KubeDNS会直接解析,对于外部域名,KubeDNS会丢给上一级DNS服务器解析,这个上一级DNS服务器就依赖于resolv.conf。
所以我们只要保证宿主机的/etc/resolv.conf
正确就行了:
vi /etc/sysconfig/network-scripts/ifcfg-ens192,这里具体路径视情况而定。
添加两行DNS配置。
添加完成后,service network restart
再cat /etc/resolv.conf
:
DNS配置就被写入到/etc/resolv.conf中。
我们再去kubesphere中去看,搜索mysql就能搜索到了:
ks-apiserver也不报错了: