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
     
     
     
     

  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/tchua/p/10778053.html
Copyright © 2011-2022 走看看