目录

手动部署CoreDNS

概述

CoreDNS 虽然说是 Kubernetes 集群重要的组件,但实际上,CoreDNS 并非 Kubernetes 团队的官方组成部分,而是由 CoreOS 公司开发的。现在 kubeadm 非常方便了,创建集群自动就帮部署了 CoreDNS,那么如果需要手动部署,应该查看哪些资料,进行哪些操作呢,本文将详细进行讨论。

kubeadm

现在大家都非常熟悉 kubeadm 了,那么如果考虑如何部署 CoreDNS 的时候,我们可以先参考一下 kubeadm 是如果在创建集群的过程中把 CoreDNS 部署上的,下面参考的是 v1.30.4 的 kubeadm。 CoreDNS 作为 kubeadm 的 addon,在创建集群的时候会默认部署,在 kubeadm 的代码里,CoreDNS 的相关 Yaml 文件实际上是作为 manifest 根据 kubeadm 上下文的一些参数来渲染出来的。

  1. CoreDNSService
  2. CoreDNSDeployment
  3. CoreDNSConfigMap
  4. CoreDNSClusterRole
  5. CoreDNSClusterRoleBinding
  6. CoreDNSServiceAccount

看完 kubeadm 的实现之后,大家应该可以理解,安装 CoreDNS 并非太困难的事情,基本上也是创建几个资源就可以了。

官方方式

kubeadm 部署 CoreDNS 的实现跟大部分组件的部署类似,那么官方版本又是怎样的呢,我们来看看官方文档。而实际上,CoreDNS 官方现在是推荐使用 Helm Chart 的方式部署,可以查看官方Chart

关于DNSIP

kubeadm 中是通过取第十位 IP 来确定 CoreDNS 使用的 ClusterIp 的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
dnsip, err := kubeadmconstants.GetDNSIP(cfg.Networking.ServiceSubnet)

// GetDNSIP returns a dnsIP, which is 10th IP in svcSubnet CIDR range
func GetDNSIP(svcSubnetList string) (net.IP, error) {
// Get the service subnet CIDR
svcSubnetCIDR, err := GetKubernetesServiceCIDR(svcSubnetList)
if err != nil {
return nil, errors.Wrapf(err, "unable to get internal Kubernetes Service IP from the given service CIDR (%s)", svcSubnetList)
}

// Selects the 10th IP in service subnet CIDR range as dnsIP
dnsIP, err := netutils.GetIndexedIP(svcSubnetCIDR, 10)
if err != nil {
return nil, errors.Wrap(err, "unable to get internal Kubernetes Service IP from the given service CIDR")
}

return dnsIP, nil
}

参考资料

  1. CoreDNS#installation
  2. Deploying Kubernetes with CoreDNS using kubeadm