kubernetes集群配置dns服务
本文將在前文的基礎上介紹在kubernetes集群環(huán)境中配置dns服務,在k8s集群中,pod的生命周期是短暫的,pod重啟后ip地址會產(chǎn)生變化,對于應用程序來說這是不可接受的,為解決這個問題,K8S集群巧妙的引入的dns服務來實現(xiàn)服務的發(fā)現(xiàn),在k8s集群中dns總共需要使用4個組件,各組件分工如下:
etcd:DNS存儲
kube2sky:將Kubernetes Master中的service(服務)注冊到etcd。
skyDNS:提供DNS域名解析服務。
healthz:提供對skydns服務的健康檢查。
一、下載相關鏡像文件,并納入本地倉庫統(tǒng)一管理
# docker pull docker.io/elcolio/etcd # docker pull docker.io/port/kubernetes-kube2sky # docker pull docker.io/skynetservices/skydns # docker pull docker.io/wu1boy/healthz# docker tag docker.io/elcolio/etcd registry.fjhb.cn/etcd # docker tag docker.io/port/kubernetes-kube2sky registry.fjhb.cn/kubernetes-kube2sky # docker tag docker.io/skynetservices/skydns registry.fjhb.cn/skydns # docker tag docker.io/wu1boy/healthz registry.fjhb.cn/healthz# docker push registry.fjhb.cn/etcd # docker push registry.fjhb.cn/kubernetes-kube2sky # docker push registry.fjhb.cn/skydns # docker push registry.fjhb.cn/healthz # docker images |grep fjhb
二、通過rc文件創(chuàng)建pod
這里面一個pod包含了4個組件,一個組件運行在一個docker容器中
三、通過srv文件創(chuàng)建service
# cat skydns-svc.yaml apiVersion: v1 kind: Service metadata:name: kube-dnsnamespace: defaultlabels:k8s-app: kube-dnskubernetes.io/cluster-service: "true"kubernetes.io/name: "KubeDNS" spec:selector:k8s-app: kube-dnsclusterIP: 10.254.16.254ports:- name: dnsport: 53protocol: UDP- name: dns-tcpport: 53protocol: TCP # kubectl create -f skydns-rc.yaml # kubectl create -f skydns-svc.yaml # kubectl get rc # kubectl get pod # kubectl get svc # kubectl describe svc kube-dns # kubectl describe rc kube-dns # kubectl describe pod kube-dns-9fllp Name: kube-dns-9fllp Namespace: default Node: 192.168.115.6/192.168.115.6 Start Time: Tue, 23 Jan 2018 10:55:19 -0500 Labels: k8s-app=kube-dnskubernetes.io/cluster-service=trueversion=v12 Status: Running IP: 172.16.37.5 Controllers: ReplicationController/kube-dns Containers:etcd:Container ID: docker://62ad76bfaca1797c5f43b0e9eebc04074169fce4cc15ef3ffc4cd19ffa9c8c19Image: registry.fjhb.cn/etcdImage ID: docker-pullable://docker.io/elcolio/etcd@sha256:3b4dcd35a7eefea9ce2970c81dcdf0d0801a778d117735ee1d883222de8bbd9fPort:Command:/bin/etcd--data-dir/tmp/data--listen-client-urlshttp://127.0.0.1:2379,http://127.0.0.1:4001--advertise-client-urlshttp://127.0.0.1:2379,http://127.0.0.1:4001--initial-cluster-tokenskydns-etcdLimits:cpu: 100mmemory: 50MiRequests:cpu: 100mmemory: 50MiState: RunningStarted: Tue, 23 Jan 2018 10:55:23 -0500Ready: TrueRestart Count: 0Volume Mounts:/tmp/data from etcd-storage (rw)/var/run/secrets/kubernetes.io/serviceaccount from default-token-6pddn (ro)Environment Variables: <none>kube2sky:Container ID: docker://6b0bc6e8dce83e3eee5c7e654fbaca693730623fb7936a1fd9d73de1a1dd8152Image: registry.fjhb.cn/kubernetes-kube2skyImage ID: docker-pullable://docker.io/port/kubernetes-kube2sky@sha256:0230d3fbb0aeb4ddcf903811441cf2911769dbe317a55187f58ca84c95107ff5Port:Args:-kube_master_url=http://192.168.115.5:8080-domain=cluster.localLimits:cpu: 100mmemory: 50MiRequests:cpu: 100mmemory: 50MiState: RunningStarted: Tue, 23 Jan 2018 10:55:25 -0500Ready: TrueRestart Count: 0Volume Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-6pddn (ro)Environment Variables: <none>skydns:Container ID: docker://ebc2aaaa54e2f922e370e454ec537665d813c69d37a21e3afd908e6dad056627Image: registry.fjhb.cn/skydnsImage ID: docker-pullable://docker.io/skynetservices/skydns@sha256:6f8a9cff0b946574bb59804016d3aacebc637581bace452db6a7515fa2df79eePorts: 53/UDP, 53/TCPArgs:-machines=http://127.0.0.1:4001-addr=0.0.0.0:53-ns-rotate=false-domain=cluster.localLimits:cpu: 100mmemory: 50MiRequests:cpu: 100mmemory: 50MiState: RunningStarted: Tue, 23 Jan 2018 10:55:27 -0500Ready: TrueRestart Count: 0Volume Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-6pddn (ro)Environment Variables: <none>healthz:Container ID: docker://f1de1189fa6b51281d414d7a739b86494b04c8271dc6bb5f20c51fac15ec9601Image: registry.fjhb.cn/healthzImage ID: docker-pullable://docker.io/wu1boy/healthz@sha256:d6690c0a8cc4f810a5e691b6a9b8b035192cb967cb10e91c74824bb4c8eea796Port: 8080/TCPArgs:-cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null-port=8080Limits:cpu: 10mmemory: 20MiRequests:cpu: 10mmemory: 20MiState: RunningStarted: Tue, 23 Jan 2018 10:55:29 -0500Ready: TrueRestart Count: 0Volume Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-6pddn (ro)Environment Variables: <none> Conditions:Type StatusInitialized True Ready True PodScheduled True Volumes:etcd-storage:Type: EmptyDir (a temporary directory that shares a pod's lifetime)Medium:default-token-6pddn:Type: Secret (a volume populated by a Secret)SecretName: default-token-6pddn QoS Class: Guaranteed Tolerations: <none> Events:FirstSeen LastSeen Count From SubObjectPath Type Reason Message--------- -------- ----- ---- ------------- -------- ------ -------7m 7m 1 {default-scheduler } Normal Scheduled Successfully assigned kube-dns-9fllp to 192.168.115.67m 7m 1 {kubelet 192.168.115.6} spec.containers{etcd} Normal Pulling pulling image "registry.fjhb.cn/etcd"7m 7m 1 {kubelet 192.168.115.6} spec.containers{etcd} Normal Pulled Successfully pulled image "registry.fjhb.cn/etcd"7m 7m 1 {kubelet 192.168.115.6} spec.containers{etcd} Normal Created Created container with docker id 62ad76bfaca1; Security:[seccomp=unconfined]7m 7m 1 {kubelet 192.168.115.6} spec.containers{kube2sky} Normal Pulled Successfully pulled image "registry.fjhb.cn/kubernetes-kube2sky"7m 7m 1 {kubelet 192.168.115.6} spec.containers{etcd} Normal Started Started container with docker id 62ad76bfaca17m 7m 1 {kubelet 192.168.115.6} spec.containers{kube2sky} Normal Pulling pulling image "registry.fjhb.cn/kubernetes-kube2sky"7m 7m 1 {kubelet 192.168.115.6} spec.containers{kube2sky} Normal Created Created container with docker id 6b0bc6e8dce8; Security:[seccomp=unconfined]7m 7m 1 {kubelet 192.168.115.6} spec.containers{skydns} Normal Pulled Successfully pulled image "registry.fjhb.cn/skydns"7m 7m 1 {kubelet 192.168.115.6} spec.containers{skydns} Normal Pulling pulling image "registry.fjhb.cn/skydns"7m 7m 1 {kubelet 192.168.115.6} spec.containers{kube2sky} Normal Started Started container with docker id 6b0bc6e8dce87m 7m 1 {kubelet 192.168.115.6} spec.containers{skydns} Normal Created Created container with docker id ebc2aaaa54e2; Security:[seccomp=unconfined]7m 7m 1 {kubelet 192.168.115.6} spec.containers{skydns} Normal Started Started container with docker id ebc2aaaa54e27m 7m 1 {kubelet 192.168.115.6} spec.containers{healthz} Normal Pulling pulling image "registry.fjhb.cn/healthz"7m 7m 1 {kubelet 192.168.115.6} spec.containers{healthz} Normal Pulled Successfully pulled image "registry.fjhb.cn/healthz"7m 7m 1 {kubelet 192.168.115.6} spec.containers{healthz} Normal Created Created container with docker id f1de1189fa6b; Security:[seccomp=unconfined]7m 7m 1 {kubelet 192.168.115.6} spec.containers{healthz} Normal Started Started container with docker id f1de1189fa6b四、修改kubelet配置文件并重啟服務
注意:
--cluster-dns參數(shù)要和前面svc文件中的clusterIP參數(shù)一致
--cluster-domain參數(shù)要和前面rc文件中的-domain參數(shù)一致
集群內所有的kubelet節(jié)點都需要修改
五、運行一個busybox和curl進行測試
# cat busybox.yaml apiVersion: v1 kind: Pod metadata:name: busybox spec:containers:- name: busyboximage: docker.io/busyboxcommand:- sleep - "3600" # cat curl.yaml apiVersion: v1 kind: Pod metadata:name: curl spec:containers:- name: curlimage: docker.io/webwurst/curl-utilscommand:- sleep - "3600" # kubectl create -f busybox.yaml # kubectl create -f curl.yaml
通過busybox容器對kubernetes的service進行解析,發(fā)現(xiàn)service被自動解析成了對應的集群ip地址,而并不是172.16網(wǎng)段的docker地址
通過curl容器訪問前面創(chuàng)建的php留言板
總結
以上是生活随笔為你收集整理的kubernetes集群配置dns服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题准备--CSS
- 下一篇: OpenStack遇到的坑