ijava学习网> 知识分享> Web 服务> kubernetes配置DNS

kubernetes配置DNS

时间: 2018-11-09 09:48:01 标签BusyBox , 脚本

    

kubernetes配置DNS

  在搭建fabric的k8s启动方式,启动的kfk、zookeeper,解析不到服务名,虽然可以  
通过修改/etc/hosts解决,但是很麻烦,并且,fabric提供的镜像,进入容器后,发现很多工  
具没有,甚至不能apt安装.
  所以,考虑配置DNS,这里有两个选择,kube-dns和core-dns,最先配置了kube-dns,遇到  
了问题,容器启动失败,后换成core-dns,也是同样的问题,这很有可能跟搭建的集群有关.
  最终发现是自己搭建集群,启动参数设置的又问题,这个工具有点大,参数有点多,慢慢学.
  • 集群环境说明

      为了简单搭建集群,以尽快学习相关知识,进入到原生云领域.这里不向大家那样搭建多个  
    节点,而只在一个节点上进行,及master和node在同一台物理机器上.这样专注于业务功能  
    开发,而不是集群的运维.
    • 节点环境

      阿里云 ubuntu16.04环境
    nameip
    master/node1172.16.199.55(私有ip)
    • kubernetes1.11手动搭建

    • 忙完这段时间的工作(阿里比赛和实验室的专利),撰写完整的单节点搭建k8s环境,此处留坑

  • 搭建core-dns

    • 下载core-dns

      git clone https://github.com/coredns/deployment.gitcd deployment/kubernetes
    • deployment/kubernetes 目录结构

      liudeMacBook-Pro:kubernetes liu$ tree
      .
      ├── README.md
      ├── coredns.yaml.sed  
      ├── deploy.sh     
      └── rollback.sh   
      
      0 directories, 4 files
    • 生成coredns.yaml

      #将部署结果保存到coredns.yaml./deploy.sh -i 169.169.0.2 -d cluster.local >coredns.yaml#为方便操作可写成脚本(主要是,之前debug太多次)
    • 部署coredns

      kubectl create -f .#一段时间后,正常的话root@liu:~/data/deployment# kubectl get pods -n kube-systemNAME                       READY     STATUS    RESTARTS   AGE
      coredns-55f86bf584-bp6sx   1/1       Running   0          11s
      coredns-55f86bf584-gfpkr   1/1       Running   0          11s       #但,一开始,我只一直是如下的情况,稍后解决root@liu:~#  kubectl get pods -n   kube-systemNAME                       READY     STATUS             RESTARTS   AGE
      coredns-7c49789867-gwlhm   0/1       CrashLoopBackOff   18         1h
      coredns-7c49789867-kf292   0/1       CrashLoopBackOff   18         1h
    • 测试dns

      • 创建busybox.yaml(注意:yaml不能使用tab,并注意空格数)

        apiVersion: v1
        kind: Pod
        metadata:
          name: busybox
          namespace: default
        spec:
          containers:
          - image: busybox
            command:
              - sleep
              - "3600"imagePullPolicy: IfNotPresent
            name: busybox
          restartPolicy: Always
      • 创建测试pod

        root@liu:~# kubectl create -f busybox.yamlroot@liu:~# kubectl get podNAME      READY     STATUS    RESTARTS   AGE
        busybox   1/1       Running   1          1h
      • 测试dns

        #成功状态root@liu:~# kubectl exec -ti busybox -- nslookup baidu.comServer:    100.100.2.136Address 1: 100.100.2.136Name:      baidu.com
        Address 1: 123.125.115.110Address 2: 220.181.57.216# k8s官网上的那个测试,失败的原因是kubernetes.default被墙了root@liu:~# kubectl exec -ti busybox -- nslookup           kubernetes.defaultServer:    100.100.2.136Address 1: 100.100.2.136nslookup: can't resolve 'kubernetes.default'
        command terminated with exit code 1
        
        #开启vpn后,测试记过如下图

        dns


以上是正常的创建过程,但实际中遇到了各种问题
  • Q1:coredns/kubedns容器创建失败

    root@liu:~# kubectl get pod -n kube-systemNAME                       READY     STATUS             RESTARTS   AGE
    coredns-55f86bf584-7d9q7   0/1       CrashLoopBackOff   14         53m
    coredns-55f86bf584-sdgkd   0/1       CrashLoopBackOff   14         53m
    root@liu:~/data/deployment# kubectl logs -n kube-system -f     coredns-55f86bf584-7hjmp2018/09/02 04:17:43 plugin/kubernetes: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
  • A:该错误是apiserver没有设置启动参数 –admission-control=ServiceAccount

    • 修改apiserver启动参数

      KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0   --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission-control=ServiceAccount,NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
    • 修改kube-controller-manager 启动参数–service-account-private-key-file

      KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/var/run/kubernetes/apiserver.key --master=http://172.16.199.55:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
      仅修改apiserver,会造成创建rc,生不成rc,即查询不到pod
    • 参考:

      • kubernetes下heapster的部署案例

      • Kubernetes 解决/var/run/secret/kubernetes.io/serviceaccount/token no such file or directory问题

  • 还有一个问题待解决找不到参数crt


版权说明| 关于ijava| 合作伙伴| 联系我们| 网站地图| 招贤纳士

Copyright © 2017 www.ijava.com All Rights Reserved 版权所有•ijava学习网 京ICP备14061482号-18         官方QQ:3325669927

ijava学习网提供免费java教程和大量java面试题库,给高级会员提供免费的java培训,同时提共一些java开发项目和java下载,java工程师,java菜鸟们快来哦。记住我们的网站:www.ijava.com