kubernetes1.5.2 DNS
Cluster DNS主要包含如下几项:
- SkyDNS :提供DNS解析服务。
- Etcd :用于DNS的存储。
- Kube2sky :监听Kubernetes,当有新的Service创建时,将其注册到etcd上。
- healthz 提供对skydns服务的健康检查功能。
在 master服务器上
Cluster DNS在Kubernetes发布包的cluster/addons/dns目录下 yum -y install wget wget https://codeload.github.com/kubernetes/kubernetes/tar.gz/v1.2.7 tar zxvf v1.2.7 cd kubernetes-1.2.7/cluster/addons/dns
skydns服务使用的clusterIP需要我们指定一个固定的IP地址,每个Node的kubelet进程都将使用这个IP地址,不能通过Kuberneters自动给skydns分配。
通过环境变量,配置参数 export DNS_SERVER_IP="10.254.10.2" export DNS_DOMAIN="cluster.local" export DNS_REPLICAS=1
设置 Cluster DNS Service的IP为 10.254.10.2(不能和已分配的IP重复),Cluster DNS的本地域为 cluster.local。
修改每台Node上的kubelet启动参数
vim /etc/kubernetes/kubelet #在KUBELET_ARGS里增加: --cluster_dns=10.254.10.2 #此处的cluster ip为dns服务的cluster ip 地址,不能通过k8s自动分配,每个node的kubelet进程都会使用这个ip地址,并且这个ip地址需要在 kube-apiserver启动参数--service-cluster-ip-range指定ip地址范围内 --cluster_domain=cluster.local #设置k8s集群中service所属的域名(为dns服务中设置的域名),这里要与svc.yaml中设置的域名相同,kube2sky会通过Api Server监控集群中的全部service的定义, 生成相应的 记录并保存到etcd中
重启kubelet服务
systemctl restart kubelet
master下
生成dns-rc.yaml和dns-svc.yaml
kubernetes-1.2.7/cluster/addons/dns目录下。
skydns-rc.yaml.in和skydns-svc.yaml.in是两个模板文件,通过设置的环境变量修改其中的相应属性值,可以生成Replication Controller和Service的定义文件。
生成Replication Controller的定义文件dns-rc.yaml创建RC
sed -e "s/{{ pillar\['dns_replicas'\] }}/${DNS_REPLICAS}/g;s/{{ pillar\['dns_domain'\] }}/${DNS_DOMAIN}/g" \skydns-rc.yaml.in > dns-rc.yaml
查看dns-rc.yaml
apiVersion: v1 kind: ReplicationController metadata: name: kube-dns-v11 namespace: kube-system labels: k8s-app: kube-dns version: v11 kubernetes.io/cluster-service: "true" spec: replicas: 1 selector: k8s-app: kube-dns version: v11 template: metadata: labels: k8s-app: kube-dns version: v11 kubernetes.io/cluster-service: "true" spec: containers: - name: etcd image: index.tenxcloud.com/google_containers/etcd-amd64:2.2.1 resources: limits: cpu: 100m memory: 500Mi requests: cpu: 100m memory: 50Mi command: - /usr/local/bin/etcd - -data-dir - /var/etcd/data - -listen-client-urls - http://127.0.0.1:2379,http://127.0.0.1:4001 - -advertise-client-urls - http://127.0.0.1:2379,http://127.0.0.1:4001 - -initial-cluster-token - skydns-etcd volumeMounts: - name: etcd-storage mountPath: /var/etcd/data - name: kube2sky image: index.tenxcloud.com/google_containers/kube2sky:1.14 resources: limits: cpu: 100m # Kube2sky watches all pods. memory: 200Mi requests: cpu: 100m memory: 50Mi livenessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 60 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: /readiness port: 8081 scheme: HTTP initialDelaySeconds: 30 timeoutSeconds: 5 args: # command = "/kube2sky" #特别注意 #- -domain=cluster.local是错误的写法 #- -kube-master-url=http://192.168.121.143:8080根据自己实际情况修改 #会导致CrashLoopBackOff的错误 #如果已经进行CA认证,则可以不指定kube-master-url - --domain=cluster.local - --kube-master-url=http://192.168.132.148:8080 ##master地址 - name: skydns image: index.tenxcloud.com/google_containers/skydns:2015-10-13-8c72f8c resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 50Mi args: # command = "/skydns" - -machines=http://127.0.0.1:4001 - -addr=0.0.0.0:53 - -ns-rotate=false - -domain=cluster.local. ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - name: healthz image: index.tenxcloud.com/google_containers/exechealthz:1.0 resources: limits: cpu: 10m memory: 20Mi requests: cpu: 10m memory: 20Mi args: - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null - -port=8080 ports: - containerPort: 8080 protocol: TCP volumes: - name: etcd-storage emptyDir: {} dnsPolicy: Default # Don't use cluster DNS.
需要注意kube2sky需要ServiceAccount来调用Kubernetes API。
而ServiceAccount的使用需要对Kubernetes集群进行安全认证,否则可能会导致RC无法自动创建Pod等错误。
通过定义文件dns-rc.yaml创建Cluster DNS Replication Controller
kubectl create -f dns-rc.yaml
验证Cluster DNS Pod是否创建运行成功:
kubectl get pod --namespace=kube-system -o wide
生成Service的定义文件dns-svc.yaml创建Service
sed -e "s/{{ pillar\['dns_server'\] }}/${DNS_SERVER_IP}/g" \skydns-svc.yaml.in > dns-svc.yaml
dns-svc.yaml
apiVersion: v1 kind: Service metadata: name: kube-dns namespace: kube-system labels: k8s-app: kube-dns kubernetes.io/cluster-service: "true" kubernetes.io/name: "KubeDNS" spec: selector: k8s-app: kube-dns clusterIP: 10.254.10.2 ports: - name: dns port: 53 protocol: UDP - name: dns-tcp port: 53 protocol: TCP
根据dns-svc.yaml创建Cluster DNS Service
kubectl create -f dns-svc.yaml
验证:
kubectl get svc --namespace=kube-system -o wide
创建Pod验证Cluster DNS
使用一个带有nslookup的工具来验证DNS是否能够正常工作:
busybox.yaml
apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - name: busybox image: index.tenxcloud.com/google_containers/busybox command: - sleep - "
#kubectl create -f busybox.yaml #kubectl exec busybox -- nslookup kubernetes.default.svc.cluster.local
ok,搭建完成
kubernetes1.5.2 DNS的更多相关文章
- kubernetes1.3搭建dns服务
https://xuxinkun.github.io/2016/07/22/kubernetes-dns/
- kubernetes1.5.2--部署DNS服务
本文基于kubernetes 1.5.2版本编写 在kubernetes1.2之前,采用skydns+kube2dns+etcd的方式来部署dns.而从1.3开始,则部署方式有了一点儿变化,将skyd ...
- Kubernetes1.7—DNS安装
虽然通过了Service解决了Pod重建后IP动态变化(服务发现).负载均衡问题,但使用Service还是要需要知道CLUSTER-IP,而通过NDS可以解决该问题:在Kubernetes集群中可通过 ...
- CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇)
安装前记: 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿 ...
- kubernetes1.13之后的kubeadm init config
1.kubernetes1.13之后kubeadm开始GA,由于1.13的kube-proxy有bug,删除ipvs的地方总是导致kube-proxy挂掉,所以建议直接用1.13.2,这个版本解决了b ...
- Kubernetes 1.5 配置dns
在kubernetes1.2的时候,采用了skydns + kube2dns +etcd的方式来部署dns.而从1.3开始,则部署方式有了一点儿变化,将skydns和kube2dns封装到了一个容器镜 ...
- kubernetes---CentOS7安装kubernetes1.11.2图文完整版
转载请注明出处:kubernetes-CentOS7安装kubernetes1.11.2图文完整版 架构规划 k8s至少需要一个master和一个node才能组成一个可用集群. 本章我们搭建一个mas ...
- Kubernetes1.5 集成Heapster
Kubernetes1.5 集成Heapster Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收 ...
- 生产环境:ansible自动化部署kubernetes-1.14
概述: 本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14, 集群包含calico.nginx-ingress.HA 提供资源有kuberne ...
随机推荐
- Vue获取dom和数据监听
Vue获取dom对象 在js和jq中我们都能获取dom对象例如 // 获取id=1的div标签 <div id=d1>dom对象</div> // js语法 let ele = ...
- mysql-语法大全
DDL语句 库 创建 create database 库名 charset utf8; 删除 drop database 库名; 修改 alter database 库名 charset latin; ...
- P1578 奶牛浴场
P1578 奶牛浴场 题目描述 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建造一个大型浴场.但是John的奶牛有一个奇怪的习惯,每头奶牛都必 ...
- PHP 公共方法分享180628
查看php 类的详情:方法.常量.属性( type(new \Illuminate\Http\Request());) /** * fixme 打印类详情 * @param $class object ...
- Velocity 快捷键
快捷键(2018-03-08) General Keyboard Shortcuts The following shortcuts are available anywhere within the ...
- 【Tsinsen A1339】JZPLCM (树状数组)
Description 原题链接 给定一长度为\(~n~\)的正整数序列\(~a~\),有\(~q~\)次询问,每次询问一段区间内所有数的\(~LCM~\)(即最小公倍数).由于答案可能很大,输出 ...
- 使用jvisualVm监控本地和远程的jvm
jvisualVm是jdk自带的可视化监控工具,功能很强大,可安装各种扩展插件.本篇不打算讲解如果使用详细的功能,只讲在windows环境怎么监控本地和远端(一般是无界面的linux系统)的java进 ...
- jmeter生成测试报告
- NOIP2011Mayan游戏(模拟)
Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个77 行\times 5×5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指 ...
- hdu 3790 最短路问题 (spfa练手)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...