Kubernetes部署DNS
2024-08-29 03:25:57
前言
阅读地址 http://thoreauz.com/2017/04/16/docker/Kubernetes%E9%83%A8%E7%BD%B2DNS%E5%92%8CDashboard/
Kubernetes中的dns是什么?
k8s的服务发现有两种,第一种是基于环境变量,第二种是基于DNS。
第一种环境变量
1.比如生成个pod的容器,默认情况,外部是不能访问容器内部的。
2.我们生成service的资源对象,绑定第一步的pod容器,后生成的pod容器的环境变量会增加第一步的service生成的集群IP。
3.这种方式缺点明显,第一个pod容器是找不到后面pod容器生成的service对象。
第二种基于DNS.
1.首先整个kube-dns的容器,它负责去获取service对应的服务
2.再整个kube-dnsmasq-amd64:1.4容器,它是个dns服务端
3.第一步检测的service的变化就自动更新到第二部的dns服务端
4.其他业务容器启动时的dns指定第二步容器的集群IP,我们可以通过cat /etc/resolv.conf 查看是否生效.
实战,如果按照作者的方法去做,dns一会就死了,改进版
1.线生成kube-dns和kube-dnsmasq容器的配置文件skydns-rc.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
spec:
# replicas: not specified here:
# . In order to make Addon Manager do not reconcile this replicas parameter.
# . Default is .
# . Will be tuned in real time if DNS horizontal auto-scaling is turned on.
strategy:
rollingUpdate:
maxSurge: %
maxUnavailable:
selector:
matchLabels:
k8s-app: kube-dns
template:
metadata:
labels:
k8s-app: kube-dns
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
spec:
containers:
- name: kubedns
# image: gcr.io/google_containers/kubedns-amd64:1.9
image: registry.cn-hangzhou.aliyuncs.com/google-containers/kubedns-amd64:1.9
args:
# - --domain=cluster.local.
- --domain=cluster.local.
- --dns-port=
- --config-map=kube-dns
# This should be set to v= only after the new image (cut from 1.5) has
# been released, otherwise we will flood the logs.
- --v=
- --kube-master-url=http://192.168.122.94:8080 # 指定api
env:
- name: PROMETHEUS_PORT
value: ""
ports:
- containerPort:
name: dns-local
protocol: UDP
- containerPort:
name: dns-tcp-local
protocol: TCP
- containerPort:
name: metrics
protocol: TCP
- name: dnsmasq
# image: gcr.io/google_containers/kube-dnsmasq-amd64:1.4.
image: registry.cn-hangzhou.aliyuncs.com/google-containers/kube-dnsmasq-amd64:1.4
args:
- --cache-size=
- --no-resolv
- --server=127.0.0.1#
# - --log-facility=-
ports:
- containerPort:
name: dns
protocol: UDP
- containerPort:
name: dns-tcp
protocol: TCP
# see: https://github.com/kubernetes/kubernetes/issues/29055 for details
2.生成service,容器内部通过集群IP来访问dns,这里固定了个集群IP地址,不然会动态生成一个。配置文件名skydns-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: $DNS_SERVER_IP
clusterIP: 10.10.10.254
ports:
- name: dns
port:
protocol: UDP
- name: dns-tcp
port:
protocol: TCP
3.启动
kubectl create -f skydns-rc.yaml
kubectl create -f skydns-svc.yaml
4.修改各个node节点的kubelet配置并重启
vim /etc/kubernetes/kubelet
# 添加这一行
KUBELET_ARGS="--cluster_dns=10.254.0.100 --cluster_domain=cluster.local"
systemctl restart kubelet
5.验证
所有pod容器重新生成,进入容器检测 cat /etc/resolv.conf 配置的dns是否有集群IP
最新文章
- [LeetCode] Triangle 三角形
- iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容
- BZOJ 1923: [Sdoi2010]外星千足虫
- Servlet过滤器(详询请加qq:2085920154)
- nuint笔记
- Win10 64位安装SQL2000(个人版)
- 批处理脚本修改hosts文件指定域名解析IP
- 检测是否支持HTML5中的Video标签
- UVa 11859 (Nim) Division Game
- CSS之Win8界面摸拟
- uvalive 4670 Dominating Patterns
- Android学习笔记-TextView(文本框)(二)
- Comparable和Comparator的差别
- 你不知道的JavaScript--Item9 call(),apply(),bind()与回调
- [翻译] Linux 内核中的位数组和位操作
- RocketMQ知识整理与总结
- python总结 + 部署简单项目 到生产
- kubernetes容器删除时快速释放ip的方案
- HDU3377 Plan
- jmeter使用HTTP代理服务器
热门文章
- (转载)《利用Python进行数据分析·第2版》电子书
- Kaggle 房价预测问题参考资料
- java 线程池的创建方式
- 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询
- oracle 表连接 - sort merge joins 排序合并连接
- 三十六、python 中subprocess介绍
- linux设置开机启动程序?
- EDM设计案例分享:6款引人入胜的夏日邮件营销模板分享
- AssertionError: View function mapping is overwriting an existing endpoint function: insertCase
- VMware 虚拟机的虚拟磁盘编程知识点扫盲之一