k8s内网实践
问题:
因为kubelet有自动垃圾收集机制,当我们在内网使用k8s时,镜像被回收之后,将无法自动拉取相关镜像,从而导致容器无法正常运行。
解决方案:
1、搭建本地镜像仓库,并且创建对应的ingress规则
2、创建自定义CoreDNS解析,并将CoreDNS配置到宿主机上去
3、将镜像上传到本地仓库
每台k8s节点上添加CoreDNS
# cat /etc/resolv.conf
nameserver 10.96.0.10 # CoreDNS IP地址
nameserver 223.5.5.5 # 公网DNS
search svc.cluster.local cluster.local
# 如果服务器使用 NetworkManager 管理网络连接,那么需要使用`nmcli`命令进行配置,否则重启服务器之后配置会被 NetworkManager 自动覆盖
nmcli connection modify "Wired Connection 1" ipv4.dns "10.96.0.10 223.5.5.5"
这样配置之后,本地服务器即可直接访问svc。
将镜像仓库的ingress地址添加到CoreDNS,使宿主机可以解析到本地仓库的域名。
参考:
实践(没有搭建harbor,以rancher为例):
配置dns
kubectl -n kube-system edit configmap coredns
查看解析结果
安装nslookup
yum provides */nslookup
yum install bind-utils.x86_64 -y
验证
[root@centos7 kube]# nslookup kube-dns.kube-system
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kube-dns.kube-system.svc.cluster.local
Address: 10.96.0.10