diff --git a/practice/configuring-dns.md b/practice/configuring-dns.md index 151760bf4e..fd8371e1b3 100644 --- a/practice/configuring-dns.md +++ b/practice/configuring-dns.md @@ -1,4 +1,4 @@ -# 配置内置DNS(kube-dns) +# 安装配置kube-dns 在我们安装Kubernetes集群的时候就已经安装了kube-dns插件,这个插件也是官方推荐安装的。通过将 Service 注册到 DNS 中,Kuberentes 可以为我们提供一种简单的服务注册发现与负载均衡方式。 @@ -146,7 +146,7 @@ kube-dns `kube-system:kube-dns` ConfigMap 的选项如下所示: #### 示例:存根域 -在这个例子中,用户有一个 Consul DNS 服务发现系统,他们希望能够与 kube-dns 集成起来。 Consul 域名服务器地址为 10.150.0.1,所有的 Consul 名字具有后缀 “.consul.local”。 要配置 Kubernetes,集群管理员只需要简单地创建一个 ConfigMap 对象,如下所示: +在这个例子中,用户有一个 Consul DNS 服务发现系统,他们希望能够与 kube-dns 集成起来。 Consul 域名服务器地址为 10.150.0.1,所有的 Consul 名字具有后缀 `.consul.local`。 要配置 Kubernetes,集群管理员只需要简单地创建一个 ConfigMap 对象,如下所示: ```yaml apiVersion: v1 @@ -201,14 +201,13 @@ spec: 使用该文件创建 Pod 并验证其状态: -```bash $ kubectl create -f busybox.yaml pod "busybox" created $ kubectl get pods busybox NAME READY STATUS RESTARTS AGE busybox 1/1 Running 0 -​``` +``` 该 Pod 运行后,您可以在它的环境中执行 `nslookup`。如果您看到类似如下的输出,表示 DNS 正在正确工作。 @@ -219,7 +218,7 @@ Address 1: 10.0.0.10 Name: kubernetes.default Address 1: 10.0.0.1 -​``` +``` 如果 `nslookup` 命令失败,检查如下内容: @@ -227,49 +226,49 @@ Address 1: 10.0.0.1 查看下 resolv.conf 文件。(参考[集成节点的 DNS](inheriting-dns-from-the-node)和 下面的[已知问题](#known-issues)获取更多信息) -​```bash +```bash $ kubectl exec busybox cat /etc/resolv.conf -​``` +``` 验证搜索路径和名称服务器设置如下(请注意,搜索路径可能因不同的云提供商而异): -​``` +``` search default.svc.cluster.local svc.cluster.local cluster.local google.internal c.gce_project_id.internal nameserver 10.0.0.10 options ndots:5 -​``` +``` 如果看到如下错误表明错误来自 kube-dns 或相关服务: -​``` +``` $ kubectl exec -ti busybox -- nslookup kubernetes.default Server: 10.0.0.10 Address 1: 10.0.0.10 nslookup: can't resolve 'kubernetes.default' -​``` +``` 或者 -​``` +``` $ kubectl exec -ti busybox -- nslookup kubernetes.default Server: 10.0.0.10 Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local nslookup: can't resolve 'kubernetes.default' -​``` +``` ### 检查 DNS pod 是否在运行 使用 `kubectl get pods` 命令验证 DNS pod 是否正在运行。 -​```bash +```bash $ kubectl get pods --namespace=kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE ... kube-dns-v19-ezo1y 3/3 Running 0 1h ... -​``` +``` 如果您看到没有 Pod 运行或者 Pod 处于 失败/完成 状态,DNS 插件可能没有部署到您的当前环境中,您需要手动部署。 @@ -277,11 +276,11 @@ kube-dns-v19-ezo1y 3/3 Running 0 1h 使用 `kubectl logs` 命令查看 DNS 守护进程的日志。 -​```bash +```bash $ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns $ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq $ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar -​``` +``` 看看有没有可疑的日志。以字母“`W`”,“`E`”,“`F`”开头的代表警告、错误和失败。请搜索具有这些日志级别的条目,并使用 [kubernetes issues](https://github.com/kubernetes/kubernetes/issues)来报告意外错误。 @@ -289,13 +288,13 @@ $ kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-syste 使用 `kubectl get service` 命令验证 DNS 服务是否启动。 -​```bash +```bash $ kubectl get svc --namespace=kube-system NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... kube-dns 10.0.0.10 53/UDP,53/TCP 1h ... -​``` +``` 如果您已经创建了该服务或它本应该默认创建但没有出现,参考[调试服务](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/)获取更多信息。 @@ -303,11 +302,11 @@ kube-dns 10.0.0.10 53/UDP,53/TCP 1h 您可以使用`kubectl get endpoints`命令验证 DNS 端点是否被暴露。 -​```bash +```bash $ kubectl get ep kube-dns --namespace=kube-system NAME ENDPOINTS AGE kube-dns 10.180.3.17:53,10.180.3.17:53 1h -​``` +``` 如果您没有看到端点,查看[调试服务](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/)文档中的端点部分。 @@ -330,5 +329,4 @@ Kubernetes 1.3 版本起引入了支持多站点 Kubernetes 安装的集群联 - [Configure DNS Service](https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/) - [Service 和 Pod 的 DNS](/docs/concepts/services-networking/dns-pod-service/) - [自动扩容集群中的 DNS 服务](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) -- [Using CoreDNS for Service Discovery](https://kubernetes.io/docs/tasks/administer-cluster/coredns/) -```` \ No newline at end of file +- [Using CoreDNS for Service Discovery](https://kubernetes.io/docs/tasks/administer-cluster/coredns/) \ No newline at end of file diff --git a/practice/coredns.md b/practice/coredns.md index 53b2b13894..ccf4ddde89 100644 --- a/practice/coredns.md +++ b/practice/coredns.md @@ -1,28 +1,23 @@ -# Kubernetes中CoreDNS安装实践 +# 安装配置CoreDNS -CoreDNS可以在具有标准的Kube-DNS的Kubernetes集群中运行。作为* Kubernetes *的插件使用,CoreDNS将从 -Kubernetes集群中读取区(zone)数据。它实现了为Kubernetes的DNS服务发现定义的规范: +CoreDNS可以在具有标准的Kube-DNS的Kubernetes集群中运行。作为Kubernetes 的插件使用,CoreDNS将从 +Kubernetes集群中读取区(zone)数据。它实现了为Kubernetes的DNS服务发现定义的规范:[Kubernetes DNS-Based Service Discovery](https://github.com/kubernetes/dns/blob/master/docs/specification.md)。 - https://github.com/kubernetes/dns/blob/master/docs/specification.md +## 部署CoreDNS +部署 CoreDNS 需要使用到官方提供的两个文件 [deploy.sh](https://github.com/coredns/deployment/blob/master/kubernetes/deploy.sh)和[coredns.yaml.sed](https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml.sed)(这两个文件已经放入manifest的[coredns](/manifests/coredns)中) -## 部署CoreDNS需要使用到官方提供的两个文件 [deploy.sh](https://github.com/coredns/deployment/blob/master/kubernetes/deploy.sh)和[coredns.yaml.sed](https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml.sed) - -(这两个文件已经放入manifest的[coredns](/manifests/coredns)中) - -`deploy.sh` 是一个用于在已经运行kube-dns的集群中生成运行CoreDNS部署文件(manifest)的工具脚本。它使用 -'coredns.yaml.sed'文件作为模板,创建一个ConfigMap和CoreDNS的deployment, 然后更新集群中已有的kube-dns +`deploy.sh` 是一个用于在已经运行kube-dns的集群中生成运行CoreDNS部署文件(manifest)的工具脚本。它使用 `coredns.yaml.sed`文件作为模板,创建一个ConfigMap和CoreDNS的deployment,然后更新集群中已有的kube-dns 服务的selector使用CoreDNS的deployment。重用已有的服务并不会在服务的请求中发生冲突。 -deploy.sh文件并不会删除kube-dns的deployment或者replication controller。如果要删除kube-dns, 你必须 -在部署CoreDNS后手动的删除kube-dns。 +`deploy.sh`文件并不会删除kube-dns的deployment或者replication controller。如果要删除kube-dns,你必须在部署CoreDNS后手动的删除kube-dns。 你需要仔细测试manifest文件,以确保它能够对你的集群正常运行。这依赖于你的怎样构建你的集群以及你正在运行的集群版本。 对manifest文件做一些修改是有比要的。 在最佳的案例场景中,使用CoreDNS替换Kube-DNS只需要使用下面的两个命令: -~~~ +~~~bash $ ./deploy.sh | kubectl apply -f - $ kubectl delete --namespace=kube-system deployment kube-dns ~~~ @@ -30,6 +25,10 @@ $ kubectl delete --namespace=kube-system deployment kube-dns 注意:我们建议在部署CoreDNS后删除kube-dns。否则如果CoreDNS和kube-dns同时运行,服务查询可能会随机的在CoreDNS和kube-dns之间产生。 -对于non-RBAC部署,你需要编辑生成的结果yaml文件: -1. 从yaml文件的“Deployment”部分删除 `serviceAccountName: coredns` -2. 删除 `ServiceAccount`, `ClusterRole`, 和 `ClusterRoleBinding` 部分 +对于非RBAC部署,你需要编辑生成的结果yaml文件: +1. 从yaml文件的`Deployment`部分删除 `serviceAccountName: coredns` +2. 删除 `ServiceAccount`、 `ClusterRole `和 `ClusterRoleBinding` 部分 + +## 参考 + +- [Kubernetes DNS-Based Service Discovery](https://github.com/kubernetes/dns/blob/master/docs/specification.md) \ No newline at end of file diff --git a/practice/dns-installation.md b/practice/dns-installation.md new file mode 100644 index 0000000000..d6d747ef61 --- /dev/null +++ b/practice/dns-installation.md @@ -0,0 +1,3 @@ +# 安装配置 DNS + +DNS 组件作为 Kubernetes 中服务注册和发现的一个必要组件,起着举足轻重的作用,是我们在安装好 Kubernetes 集群后部署的第一个容器化应用。 \ No newline at end of file