kubernetes基础入门之-配置kubernetes skyDNS服务

kubernetes基础入门之-安装部署配置示例


部署kubernetes skyDNS 

kubernetes可以为pod提供dns内部域名解析服务。

其主要作用是为pod提供可以直接通过service的名字解析为对应service的ip的功能!

1.首先在各节点的kubelet 进程中添加选项:

KUBELET_ARGS="--cluster_dns=10.254.0.10 --cluster_domain=kube.local"

【Master 节点操作如下:】

[[email protected] master /root/yaml]# cat dns/kubedns-rc.yaml

kind: ReplicationController

metadata:

name: kube-dns-v6

namespace: default

labels:

k8s-app: kube-dns

version: v6

kubernetes.io/cluster-service: "true"

spec:

replicas: 1

version: v6

template:

metadata:

labels:

k8s-app: kube-dns

version: v6

kubernetes.io/cluster-service: "true"

spec:

containers:

- name: etcd

image: index.tenxcloud.com/google_containers/etcd:2.0.9

command:

- /usr/local/bin/etcd

- -listen-client-urls

- http://0.0.0.0:2379,http://0.0.0.0:4001

- -advertise-client-urls

- http://127.0.0.1:2379,http://127.0.0.1:4001

- name: kube2sky

image: index.tenxcloud.com/google_containers/kube2sky:1.11

resources:

limits:

cpu: 100m

memory: 50Mi

command:

- /kube2sky

- --kube_master_url=http://192.168.11.10:8080

- -domain=kube.local

- name: skydns

image: index.tenxcloud.com/google_containers/skydns:2015-03-11-001

resources:

command:

- /skydns

- -machines=http://localhost:4001

- -addr=0.0.0.0:53

- -domain=kube.local

ports:

- containerPort: 53

name: dns

protocol: UDP

- containerPort: 53

name: dns-tcp

protocol: TCP

dnsPolicy: Default

[[email protected] master yaml]# cat dns/kubedns-service.yaml

apiVersion: v1

kind: Service

metadata:

name: kube-dns

namespace: default

labels:

k8s-app: kube-dns

kubernetes.io/cluster-service: "true"

kubernetes.io/name: "KubeDNS"

spec:

selector:

k8s-app: kube-dns

clusterIP: 10.254.0.10

ports:

- name: dns

port: 53

protocol: UDP

- name: dns-tcp

port: 53

protocol: TCP

注意: 

(pause负责管理pod的网络等相关事务: gcr.io/google_containers/pause-amd64:3.0)

谷歌被墙了,可以通过以下方式来使用:

1.翻墙或访问国内的docker镜像站点,下载下来改名

[[email protected] master yaml]# docker pull mritd/pause-amd64:3.0

[[email protected] master yaml]# docker tag mritd/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

2.使用内部私有仓库,在各k8s节点的kubelet 服务进程添加下面参数:

"--pod-infra-container-image=my.hub.io/pause-amd64:3.0"

>>> node 节点镜像列表 [实际环境中建议使用私有仓库的镜像]:

# docker images (显示内容便于查看,所以不完整)

gcr.io/google_containers/pause-amd64             3.0

index.tenxcloud.com/google_containers/kube2sky   1.11

index.tenxcloud.com/google_containers/etcd       2.0.9

index.tenxcloud.com/google_containers/skydns     2015-03-11-001

---------------------------------------------------- 

[[email protected] master yaml]# kubectl create -f dns/kubedns-rc.yaml --validate  //检查文件的正确性并创建

[[email protected] master yaml]# kubectl create -f dns/kubedns-service.yaml

[[email protected] master yaml]# kubectl get rc

NAME          DESIRED   CURRENT   AGE

kube-dns-v6   1         1         38m

[[email protected] master yaml]# kubectl get svc

NAME            CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE

kube-dns        10.254.0.10      <none>        53/UDP,53/TCP   38m

kubernetes      10.254.0.1       <none>        443/TCP         5h

[[email protected] master yaml]# kubectl get svc -o wide    // -o wide 参数显示详细信息

NAME            CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE       SELECTOR

kube-dns        10.254.0.10     <none>        53/UDP,53/TCP   2d        k8s-app=kube-dns

kubernetes      10.254.0.1      <none>        443/TCP         3d        <none>

2.测试DNS 是否正常解析:

首先分别创建一个名为:mysql-service的service 和 busybox的pod

[[email protected] master yaml]# cat mysql-server.yaml

apiVersion: v1

kind: Service

metadata:

labels:

name: mysql

role: service

name: mysql-service

spec:

type: NodePort

ports:

- port: 3306

targetPort: 3306

nodePort: 31000

selector:

name: mysql

[[email protected] master yaml]# cat busybox.yaml

apiVersion: v1

kind: Pod

metadata:

labels:

name: busybox

role: master

name: busybox

spec:

containers:

- name: busybox

image: busybox

command:

- sleep

- "360000"

[[email protected] master yaml]# kubectl create -f mysql-server.yaml

[[email protected] master yaml]# kubectl create -f busybox.yaml

[[email protected] master yaml]# kubectl get svc

NAME            CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE

kube-dns        10.254.0.10      <none>        53/UDP,53/TCP   41m

kubernetes      10.254.0.1       <none>        443/TCP         5h

mysql-service   10.254.155.188   <nodes>       3306/TCP        41m

[[email protected] master yaml]# kubectl get pod -o wide

NAME                READY     STATUS    RESTARTS   AGE       IP          NODE

busybox             1/1       Running   0          2d        10.1.77.2   node1

kube-dns-v6-dfucv   3/3       Running   0          2d        10.1.62.2   node2

[[email protected] master yaml]# kubectl exec -i -t busybox sh

/ # nslookup mysql-service

Server:    10.254.0.10

Address 1: 10.254.0.10

Name:      mysql-service

Address 1: 10.254.155.188

/ # nslookup mysql-service.default.kube.local

Server:    10.254.0.10

Address 1: 10.254.0.10

Name:      mysql-service.default.kube.local

Address 1: 10.254.155.188

/ #  nslookup mysql-service.default.svc.kube.local

Server:    10.254.0.10

Address 1: 10.254.0.10

Name:      mysql-service.default.svc.kube.local

Address 1: 10.254.155.188

/// 可以看到mysql-service、mysql-service.default.svc.kube.local、mysql-service.default.kube.local的域名均能正确解析为mysql-service的service中的 10.254.155.188。

/// mysql-service.default.kube.local为完整域名,其组成为<service-name>.<namespace>.<domain-name>

扩展命令操作<更多命令操作请kubectl --help 或访问 官方kubectl命令手册>

- # kubectl get rc --namespace=kube-system   查询指定命名空间

- # kubectl get pod --all-namespaces=true   查询所有命名空间

3. 最后在简单介绍下kubernetes dns的原理。

首先在部署时候创建了一个dns的rc,最终会产生三个容器(不含pause)

[[email protected] node2 ]# docker ps -a   // 根据上面的 kubectl get pod -o wide  运行在node2 节点

CONTAINER ID        IMAGE                                            COMMAND                  CREATED              STATUS              PORTS               NAMES

033800f393b9        index.alauda.cn/tutum/centos:centos6             "/run.sh"                3 days ago           Up 3 days           22/tcp              awesome_newton

0fb60dcfb8b4        gcr.io/google_containers/etcd:2.0.9              "/usr/local/bin/etcd "   3 days ago           Up 3 days                               k8s_etcd.8d001f7f_kube-dns-v6-ju8cb_default_149fdba5-4e50-11e6-ba47-0800273d5f3f_6afe5c27

0a0efd5f0aaa        gcr.io/google_containers/skydns:2015-03-11-001   "/skydns -machines=ht"   3 days ago           Up 3 days                               k8s_skydns.5d0f4a29_kube-dns-v6-ju8cb_default_149fdba5-4e50-11e6-ba47-0800273d5f3f_f7c4ee06

cfef318e4032        gcr.io/google_containers/kube2sky:1.11           "/kube2sky --kube_mas"   3 days ago           Up 3 days                               k8s_kube2sky.eb7ac18c_kube-dns-v6-ju8cb_default_149fdba5-4e50-11e6-ba47-0800273d5f3f_19b79770

afad7b2ebd3d        docker.io/kubernetes/pause                       "/pause"                 3 days ago           Up 3 days                               k8s_POD.87e723e6_kube-dns-v6-ju8cb_default_149fdba5-4e50-11e6-ba47-0800273d5f3f_3c3f7c87

【dns解析过程】

在创建的pod中,可以查看其所使用的域名解析服务器:

[[email protected] ]# kubectl exec -i -t busybox sh

/ # cat /etc/resolv.conf

search default.svc.kube.local svc.kube.local kube.local

nameserver 10.254.0.10

options ndots:5

在kubelet创建pod时,会使用为kubelet配置的-cluster_dns=10.254.0.10 --cluster_domain=kube.local,在创建的pod中从而使用对应的dns服务器。

而这一dns解析服务,实际是由dns的rc中的gcr.io/google_containers/skydns:2015-03-11-001容器0a0efd5f0aaa完成的。

skydns的数据源来自于gcr.io/google_containers/etcd:2.0.9的容器0fb60dcfb8b4。

[[email protected] node2 ]# docker exec -it 0fb etcdctl get /skydns/local/kube/svc/default/mysql-service/2f1020d6

{"host":"10.254.162.44","priority":10,"weight":10,"ttl":30,"targetstrip":0}

[[email protected] node2]# docker exec -it 0fb etcdctl get /skydns/local/kube/default/mysql-service

{"host":"10.254.162.44","priority":10,"weight":10,"ttl":30,"targetstrip":0}

【service同步过程】

etcd的数据源自于gcr.io/google_containers/kube2sky:1.11创建的cfef318e4032容器。

cfef318e4032容器通过watch kube-api的service,查看service的变化。

当service创建/删除/修改时,cfef318e4032容器获取对应的service信息,将其保存在etcd的容器0fb60dcfb8b4中,进而提供给skydns使用。

时间: 2024-10-10 17:58:23

kubernetes基础入门之-配置kubernetes skyDNS服务的相关文章

008day--linux 基础之网络配置和ssh服务

一.linux网络配置 ifconfig eno16777736 192.168.19.48/24   |   eno16777736(网卡名)   192.168.19.48/24(临时IP地址) DNS : vim /etc/resolv.conf    内容显示  (nameserver  202.156.16.47 (DNS地址)) 网关  : route add default gw (网关地址) netmask 255.255.255.0 查看网关信息: routing table

Kubernetes/4.Kubernetes快速入门

Kubernetes快速入门 通过本章节的学习,你可以充分了解到一个https的kubernetes集群中所需的证书及其作用,以及kubernetes语境内的api资源类型,最后我还补充了几个基础的GET命令,此时你可以登录到上一章节我们使用kubeadm创建的集群,进行一些查询操作了. 证书管理 API资源模型 API资源类型 命令补充 备注 证书管理 k8s于生产环境运行时,我强烈建议大家运行在https的安全环境下,其证书可分为以下三大类: root CA: apiserver:apise

kubernetes系列教程(三)kubernetes快速入门

写在前面 kubernetes中涉及很多概念,包含云生态社区中各类技术,学习成本比较高,k8s中通常以编写yaml文件完成资源的部署,对于较多入门的人来说是个较高的门坎,本文以命令行的形式代理大家快速入门,俯瞰kubernetes核心概念,快速入门. 1. 基础概念 1.1 集群与节点 kubernetes是一个开源的容器引擎管理平台,实现容器化应用的自动化部署,任务调度,弹性伸缩,负载均衡等功能,cluster是由master和node两种角色组成,其中master负责管理集群,master节

kubernetes基础

(1)什么是Kubernetes? Kubernetes是一个在集群主机间进行自动化部署.扩展和容器操作的提供以容器为中心基础设施的开源平台. 通过Kubernetes,你可以快速有效地响应用户需求: 快速而有预期地部署你的应用 极速地扩展你的应用 无缝铺展新的应用功能 节省资源,优化硬件资源的使用 我们的目标是孕育一个组件和工具的生态系统以资源在公有云和私有云中运行的应用的负担. Kubernetes特点: 可移植: 支持公有云,私有云,混合云,复合云 可扩展: 模块化,热插拨,可组合 自愈:

Kubernetes基础篇:主要特性、基本概念与总体架构

Kubernetes基础篇:主要特性.基本概念与总体架构 本文试图将Kubernetes的基础相关知识描述清楚,让一个从来没有Kubernetes实践的开发人员,能够非常容易地理解Kubernetes是什么,能够做哪些事情,以及使用它能带来的好处是什么. Kubernetes是什么 Kubernetes是一个开源的容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理.我们在完成一个应用程序的开发时,需要冗余部署该应用的多个实例,同时需要支持对应用的请求进行负载均衡,在Kubernetes

CoreDNS配置kubernetes作为后端

概述 coredns之所以如此名声大噪,就是因为从kubernetes1.9开始引入,作为kubernetes内部服务发现的默认dns.毫无疑问kubernetes是coredns的后端之一,所以我们讲coredns,就从kubernetes作为其后端开始. coredns的诸多特性网上很多文章都有提及,在这里不再赘述.简单对比下其相对于bind和skydns的优势: bind可以将解析存储到mysql或者文件中,coredns也可以将解析存储到etcd或者文件中,也支持将kubernetes作

kubernetes 基础概念学习

kubernetes基础概念1)master/node的几个守护进程master :API Server(提供了k8s各类资源对象(Pod,RC,service)的增,删,改,查及HTTP REST接口)???????????????Scheduler(负责Pod调度,通过调度算法为待调度Pod列表的每个Pod从Node列表中选择一个最适合的Node,并将信息写入etcd中.kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的P

Kubernetes/2.Kubernetes基础和部署说明

Kubernetes基础和部署说明 本章节首先就基础组件.集群基础对象和控制器进行了详细的介绍和说明,然后辨析了集群网络中的三种网络和专有名词,最后关于新手部署测试和生产环境的部署要点进行了归纳说明. 基础组件 基础对象(Objects) 控制器 集群网络 部署要点 备注 基础组件 如图所示,kubernetes集群中主要分为三个组件: Master Components kube-apiserver:作为k8s控制平面的前端,也是所有请求接收的入口 etcd:k8s集群后端所有集群数据的高可用

三、安装并配置Kubernetes Node节点

1. 安装并配置Kubernetes Node节点 1.1 安装Kubernetes Node节点所需服务 yum -y install kubernetes ? 通过yum安装kubernetes服务时默认将所有的Kubernetes服务全部安装,我们只需要在Master和Node上启动相应的服务即可. 1.2 修改Kubernetes服务配置文件 vim /etc/kubernetes/config KUBE_LOGTOSTDERR="--logtostderr=true" KUB