zoukankan      html  css  js  c++  java
  • K8S从入门到放弃系列-(12)Kubernetes集群Coredns部署

    摘要:
      集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns。
    1)下载yaml配置清单
    [root@k8s-master01 ~]# mkdir /opt/k8s/coredns
    [root@k8s-master01 ~]# cd /opt/k8s/coredns/
    [root@k8s-master01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed
    [root@k8s-master01 coredns]# mv coredns.yaml.sed coredns.yaml
    2)修改默认配置清单文件

    [root@k8s-master01 ~]# vim /opt/k8s/coredns/coredns.yaml
    # 第一处修改 apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube
    -system data: Corefile: | .:53 { errors health ready kubernetes cluster.local 10.254.0.0/18 { pods insecure fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } ## 第二处修改 ..... 搜索 /clusterIP 即可 clusterIP: 10.254.0.2
    参数解释:
      1)errors官方没有明确解释,后面研究
      2)health:健康检查,提供了指定端口(默认为8080)上的HTTP端点,如果实例是健康的,则返回“OK”。
      3)cluster.local:CoreDNS为kubernetes提供的域,10.254.0.0/18这告诉Kubernetes中间件它负责为反向区域提供PTR请求0.0.254.10.in-addr.arpa ..换句话说,这是允许反向DNS解析服务(我们经常使用到得DNS服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,正向查找区域就是我们通常所说的域名解析,反向查找区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然,要成功得到域名就必需要有该IP地址的PTR记录。PTR记录是邮件交换记录的一种,邮件交换记录中有A记录和PTR记录,A记录解析名字到地址,而PTR记录解析地址到名字。地址是指一个客户端的IP地址,名字是指一个客户的完全合格域名。通过对PTR记录的查询,达到反查的目的。)
      4)proxy:这可以配置多个upstream 域名服务器,也可以用于延迟查找 /etc/resolv.conf 中定义的域名服务器
      5)cache:这允许缓存两个响应结果,一个是肯定结果(即,查询返回一个结果)和否定结果(查询返回“没有这样的域”),具有单独的高速缓存大小和TTLs。
      # 这里 kubernetes cluster.local 为 创建 svc 的 IP 段
      kubernetes cluster.local 10.254.0.0/18
      # clusterIP  为 指定 DNS 的 IP
    3)创建
    对于配置清单中定义的一些资源,后面介绍K8S应用时,都会介绍说明,这里只要看对应的资源是否成功创建即可。
    ## 根据配置清单创建对应资源
    [root@k8s-master01 coredns]# kubectl apply -f coredns.yaml 
    ## 查看资源创建
    ### pods svc均已创建
    [root@k8s-master01 coredns]# kubectl get pod,svc -n kube-system -o wide
    NAME                                           READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
    pod/calico-kube-controllers-75569d87d7-lxmgq   1/1     Running   0          3h31m   10.10.0.22      k8s-node02   <none>           <none>
    pod/calico-node-lhmt8                          1/1     Running   0          3h31m   10.10.0.22      k8s-node02   <none>           <none>
    pod/calico-node-nkmh2                          1/1     Running   0          3h31m   10.10.0.21      k8s-node01   <none>           <none>
    pod/coredns-55f46dd959-kmhrh                   1/1     Running   0          66s     10.254.88.1     k8s-node02   <none>           <none>
    pod/coredns-55f46dd959-kxs9t                   1/1     Running   0          66s     10.254.96.193   k8s-node01   <none>           <none>
    
    NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE   SELECTOR
    service/kube-dns   ClusterIP   10.254.0.2   <none>        53/UDP,53/TCP,9153/TCP   66s   k8s-app=kube-dns
    4)测试dns解析

    ## 创建pod
    [root@k8s-master01 ~]# kubectl run nginx --image=nginx:1.14.2-alpine
    ## 查看pod状态
    ## 可以看到pod被调度到k8s-node01节点,IP地址10.254.96.194
    [root@k8s-master01 ~]# kubectl get pod -o wide
    NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
    nginx-8477bdff5d-qr5bl   1/1     Running   0          46s   10.254.96.194   k8s-node01   <none>           <none>
    ## 创建service
    [root@k8s-master01 ~]# kubectl expose deployment nginx --port=80 --target-port=80
    ## 查看service
    ### 可以看到service nginx已经创建,并已经分配地址
    [root@k8s-master01 ~]# kubectl get svc
    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.254.0.1      <none>        443/TCP   2d4h
    nginx        ClusterIP   10.254.95.165   <none>        80/TCP    12s
    ## 验证dns解析
    ### 不要使用busybox镜像测试,有坑
    ### 创建包含nslookup的pod镜像alpine
    [root@k8s-master01 ~]# kubectl run alpine --image=alpine-- sleep 3600
    ## 查看pod名称
    [root@k8s-master01 ~]# kubectl get pods
    NAME                       READY   STATUS    RESTARTS   AGE
    alpine-7c78c944f5-gsxbv   1/1     Running   0          113s
    nginx-8477bdff5d-qr5bl     1/1     Running   0          9m48s
    ## 测试
    [root@k8s-master01 ~]# kubectl exec -it alpine-7c78c944f5-gsxbv -- nslookup nginx
    nslookup: can't resolve '(null)': Name does not resolve
    
    Name:      nginx
    Address 1: 10.254.95.165 nginx.default.svc.cluster.local
     
     
     
     

  • 相关阅读:
    S3C2440的LCD虚拟显示测试
    arm-linux-gcc编译器测试
    韦东山教程ARM的时钟设置出现的问题及其解决方法
    程序在nor flash中真的可以运行吗?
    存储器的速度
    程序测试的方法
    对编程的一些思考

    [算法题] 字节流解析
    [C/C++]函数指针和函数分发表
  • 原文地址:https://www.cnblogs.com/tchua/p/10778053.html
Copyright © 2011-2022 走看看