k8s部署coredns

    k8s集群中的应用通常是通过ingress实现微服务发布的,前文介绍过在K8S集群中使用traefik实现服务的自动发布,其实现方式是traefik通过集群的DNS服务来解析service对应的集群地址(clusterip),从而将用户的访问请求转发到集群地址上。因此,在部署完集群后的第一件事情应该是配置DNS服务,目前可选的方案有skydns, kube-dns, coredns。
    kubedns是Kubernetes中的一个内置插件,目前作为一个独立的开源项目维护,见https://github.com/kubernetes/dns。该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求。CoreDNS项目是SkyDNS2的作者,Miek Gieben采用更模块化,可扩展的框架构建,将此DNS服务器作为KubeDNS的替代品。CoreDNS作为CNCF中的托管的一个项目,在Kuberentes1.9版本中,使用kubeadm方式安装的集群可以通过以下命令直接安装CoreDNS。kubeadm init –feature-gates=CoreDNS=true

准备工作

准备coredns的yaml文件

首先我们的查看cat /etc/kubernetes/kubelet dns的ip地址是多少,这里我的是10.254.0.2,根据自己的情况进行修改

  • 执行创建

    1
    2
    3
    4
    5
    6
    7
    # ./deploy.sh -i 10.254.0.2 | kubectl apply -f -
    serviceaccount/coredns created
    clusterrole.rbac.authorization.k8s.io/system:coredns created
    clusterrolebinding.rbac.authorization.k8s.io/system:coredns created
    configmap/coredns created
    deployment.apps/coredns created
    service/kube-dns created
  • 擦看coredns信息

    1
    2
    3
    4
    5
    6
    # kubectl get pod,svc,deployment,rc -n kube-system|grep dns
    pod/coredns-799775f9b6-mgdc9 1/1 Running 0 12m
    pod/coredns-799775f9b6-v95lp 1/1 Running 0 12m
    service/kube-dns ClusterIP 10.254.0.2 <none> 53/UDP,53/TCP,9153/TCP 12m

    deployment.extensions/coredns 2/2 2 2 12m

部署 DNS 自动扩容

    在大规模集群的情况下,可能需要集群 DNS 自动扩容,具体文档请参考 DNS Horizontal Autoscaler,DNS 扩容算法可参考 Github,如有需要请自行修改;以下为具体配置

  • dns-horizontal-autoscaler.yaml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    kind: ServiceAccount
    apiVersion: v1
    metadata:
    name: kube-dns-autoscaler
    namespace: kube-system
    labels:
    addonmanager.kubernetes.io/mode: Reconcile
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: system:kube-dns-autoscaler
    labels:
    addonmanager.kubernetes.io/mode: Reconcile
    rules:
    - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["list"]
    - apiGroups: [""]
    resources: ["replicationcontrollers/scale"]
    verbs: ["get", "update"]
    - apiGroups: ["extensions"]
    resources: ["deployments/scale", "replicasets/scale"]
    verbs: ["get", "update"]
    # Remove the configmaps rule once below issue is fixed:
    # kubernetes-incubator/cluster-proportional-autoscaler#16
    - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get", "create"]
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: system:kube-dns-autoscaler
    labels:
    addonmanager.kubernetes.io/mode: Reconcile
    subjects:
    - kind: ServiceAccount
    name: kube-dns-autoscaler
    namespace: kube-system
    roleRef:
    kind: ClusterRole
    name: system:kube-dns-autoscaler
    apiGroup: rbac.authorization.k8s.io

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: kube-dns-autoscaler
    namespace: kube-system
    labels:
    k8s-app: kube-dns-autoscaler
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    spec:
    selector:
    matchLabels:
    k8s-app: kube-dns-autoscaler
    template:
    metadata:
    labels:
    k8s-app: kube-dns-autoscaler
    annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
    priorityClassName: system-cluster-critical
    containers:
    - name: autoscaler
    image: gcr.azk8s.cn/google_containers/cluster-proportional-autoscaler-amd64:1.1.2-r2
    resources:
    requests:
    cpu: "20m"
    memory: "10Mi"
    command:
    - /cluster-proportional-autoscaler
    - --namespace=kube-system
    - --configmap=kube-dns-autoscaler
    # Should keep target in sync with cluster/addons/dns/kube-dns.yaml.base
    - --target=Deployment/coredns
    # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate.
    # If using small nodes, "nodesPerReplica" should dominate.
    - --default-params={"linear":{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}}
    - --logtostderr=true
    - --v=2
    tolerations:
    - key: "CriticalAddonsOnly"
    operator: "Exists"
    serviceAccountName: kube-dns-autoscaler
  • 执行创建

    1
    2
    3
    4
    5
    # kubectl apply -f dns-horizontal-autoscaler.yaml 
    serviceaccount/kube-dns-autoscaler created
    clusterrole.rbac.authorization.k8s.io/system:kube-dns-autoscaler created
    clusterrolebinding.rbac.authorization.k8s.io/system:kube-dns-autoscaler created
    deployment.apps/kube-dns-autoscaler created

执行创建以后我们可以看到pod 创建了两个dns

1
2
3
# kubectl get pods -n kube-system|grep coredns
coredns-68676b6b88-pw9c2 1/1 Running 0 7m18s
coredns-68676b6b88-tgbbv 1/1 Running 0 100m
坚持原创技术分享,您的支持将鼓励我继续创作!
0%