k8s入门系列之扩展组件(一)DNS安装篇

k8s入门系列之扩展组件(一)DNS安装篇

 

DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址。

Cluster DNS扩展插件用于支持k8s集群系统中各服务之间发现与调用。

  

组件:
  •SkyDNS 提供DNS解析服务
  •Etcd 存储DNS信息
  •Kube2sky 监听kubernetes,当有Service创建时,生成相应的记录到SkyDNS。

 

本文章的实验环境与《k8s入门系列之集群安装篇》介绍中一致。master(1) + node(4)

1.修改所有node的配置文件:/etc/kubernetes/kubelet

node1,node2,node3.node4:

[root@node1 ~]# vim /etc/kubernetes/kubelet

KUBELET_ARGS="--cluster-dns=10.254.254.254 --cluster-domain=cluster.local"     ##添加这行内容

 

 

[root@node1 ~]# tail -n 1 /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster-dns=10.254.254.254 --cluster-domain=cluster.local"

 

 

2.所有node(node1,node2,node3,node4)重新启动kubelet服务

[root@node1 ~]# systemctl restart kubelet.service

[root@node2 ~]# systemctl restart kubelet.service

[root@node3 ~]# systemctl restart kubelet.service

[root@node4 ~]# systemctl restart kubelet.service

 

 

3.根据namespace分为不同的名称空间,将系统服务统一放到一个单独的空间:kube-system,由于默认空间只有default,我们首先要创建kube-system空间。

[root@master ~]# mv /etc/skydns/ /data/
[root@master ~]# cd /data/skydns/
[root@master skydns]# vim kube-system.yml

apiVersion: v1
kind: Namespace
metadata:
  name: kube-system

 

 

 

 

 

4.在master服务器上编辑ReplicationController文件skydns-rc.yml

[root@master skydns]# vim skydns-rc.yml

==========================================================================

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: docker.gaoxiaobang.com/kubernetes/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: docker.gaoxiaobang.com/kubernetes/kube2sky:1.14
        args:
        # command = "/kube2sky"
        - --domain=cluster.local
        - --kube-master-url=http://172.25.1.25:8080
        resources:
          limits:
            cpu: 100m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 50Mi
      - name: skydns
        image: docker.gaoxiaobang.com/kubernetes/skydns:2015-10-13-8c72f8c
        resources:
          limits:
            cpu: 100m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 50Mi
        args:
        - -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
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
      - name: healthz
        image: docker.gaoxiaobang.com/kubernetes/exechealthz:1.0
        resources:
          limits:
            cpu: 10m
            memory: 20Mi
          requests:
            cpu: 10m
            memory: 20Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.cluster.local localhost >/dev/null
        - -port=8080
        ports:
        - containerPort: 8080
          protocol: TCP
      volumes:
      - name: etcd-storage
        emptyDir: {}
      dnsPolicy: Default

==========================================================================

 

 

5.在master上创建skydns服务文件skydns-svc.yml

[root@master skydns]# vim skydns-svc.yml

==============================================================

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.254.254
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

==============================================================

 

 

 先去minion节点上下载所需要的images

[root@node1 ~]# docker pull tlitiwwhtmi/etcd
Using default tag: latest
Trying to pull repository docker.io/tlitiwwhtmi/etcd ...
latest: Pulling from docker.io/tlitiwwhtmi/etcd
a3ed95caeb02: Pull complete
e3bf050bd21c: Pull complete
fde7e6273379: Pull complete
Digest: sha256:d6ea7f051e8c55185690f0dc2ee7f1696d13647cbbe90f77a9b437dbc6cd5a5c
Status: Downloaded newer image for docker.io/tlitiwwhtmi/etcd:latest

[root@node1 ~]# docker pull outrider/skydns
Using default tag: latest
Trying to pull repository docker.io/outrider/skydns ...
latest: Pulling from docker.io/outrider/skydns
a3ed95caeb02: Pull complete
1db09adb5ddd: Pull complete
23dbe86f92f6: Pull complete
8d546939e871: Pull complete
7150fec5b476: Pull complete
Digest: sha256:88432a0d99438f0b3538e53d122067439a9da80601341fdf7bf1261dc7155648
Status: Downloaded newer image for docker.io/outrider/skydns:latest

[root@node1 ~]# docker pull outrider/exechealthz
Using default tag: latest
Trying to pull repository docker.io/outrider/exechealthz ...
latest: Pulling from docker.io/outrider/exechealthz
f810322bba2c: Pull complete
a3ed95caeb02: Pull complete
6eaefd672766: Pull complete
e9196a2d25d0: Pull complete
Digest: sha256:5fb2d74fce012041f6766dbfc6c7de3a5698184101d9bca7c1993d790fb8542f
Status: Downloaded newer image for docker.io/outrider/exechealthz:latest

 
 
 

[root@node4 ~]# docker pull tlitiwwhtmi/etcd
Using default tag: latest
Trying to pull repository docker.io/tlitiwwhtmi/etcd ...
latest: Pulling from docker.io/tlitiwwhtmi/etcd
a3ed95caeb02: Pull complete
e3bf050bd21c: Pull complete
fde7e6273379: Pull complete
Digest: sha256:d6ea7f051e8c55185690f0dc2ee7f1696d13647cbbe90f77a9b437dbc6cd5a5c
Status: Downloaded newer image for docker.io/tlitiwwhtmi/etcd:latest
[root@node4 ~]# docker pull outrider/skydns
Using default tag: latest
Trying to pull repository docker.io/outrider/skydns ...
latest: Pulling from docker.io/outrider/skydns
a3ed95caeb02: Pull complete
1db09adb5ddd: Pull complete
23dbe86f92f6: Pull complete
8d546939e871: Pull complete
7150fec5b476: Pull complete
Digest: sha256:88432a0d99438f0b3538e53d122067439a9da80601341fdf7bf1261dc7155648
Status: Downloaded newer image for docker.io/outrider/skydns:latest
[root@node4 ~]# docker pull outrider/exechealthz
Using default tag: latest
Trying to pull repository docker.io/outrider/exechealthz ...
latest: Pulling from docker.io/outrider/exechealthz
f810322bba2c: Pull complete
a3ed95caeb02: Pull complete
6eaefd672766: Pull complete
e9196a2d25d0: Pull complete
Digest: sha256:5fb2d74fce012041f6766dbfc6c7de3a5698184101d9bca7c1993d790fb8542f
Status: Downloaded newer image for docker.io/outrider/exechealthz:latest

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以下待确认:

 

6.在集群中创建cluster-dns解析应用

•创建Namespace

[root@master skydns]# kubectl create -f kube-system.yml

•创建ReplicationController

[root@master skydns]# kubectl create -f skydns-rc.yml
replicationcontroller "kube-dns-v11" created

•创建Service

[root@master skydns]# kubectl create -f skydns-svc.yml
service "kube-dns" created

7.查看skydns-rc.yml文件中定义pod的启动状态,如下则启动成功。

验证Cluster DNS Pod是否创建运行成功:

[root@master skydns]# kubectl get pod --namespace=kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kube-dns-v11-x58gq 0/4 ContainerCreating 0 2h <none> 172.25.1.24

                                                  containercreating表示创建不成功

查看错误原因:

 

[root@master skydns]# kubectl describe pod --namespace=kube-system
Name:           kube-dns-v11-x58gq
Namespace:      kube-system
Node:           172.25.1.24/172.25.1.24
Start Time:     Thu, 10 Oct 2019 23:47:52 -0400
Labels:         k8s-app=kube-dns
                kubernetes.io/cluster-service=true
                version=v11
Status:         Pending
IP:
Controllers:    ReplicationController/kube-dns-v11
Containers:
  etcd:
    Container ID:
    Image:              tlitiwwhtmi/etcd
    Image ID:
    Port:
    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
    Limits:
      cpu:      100m
      memory:   500Mi
    Requests:
      cpu:              100m
      memory:           50Mi
    State:              Waiting
      Reason:           ContainerCreating
    Ready:              False
    Restart Count:      0
    Volume Mounts:      <none>
    Environment Variables:      <none>
  kube2sky:
    Container ID:
    Image:              outrider/kube2sky
    Image ID:
    Port:
    Args:
      --domain=cluster.local
      --kube-master-url=http://10.0.0.11:8080
    Limits:
      cpu:      100m
      memory:   200Mi
    Requests:
      cpu:                      100m
      memory:                   50Mi
    State:                      Waiting
      Reason:                   ContainerCreating
    Ready:                      False
    Restart Count:              0
    Liveness:                   http-get http://:8080/healthz delay=60s timeout=5s period=10s #success=1 #failure=5
    Readiness:                  http-get http://:8081/readiness delay=30s timeout=5s period=10s #success=1 #failure=3
    Volume Mounts:              <none>
    Environment Variables:      <none>
  skydns:
    Container ID:
    Image:              outrider/skydns
    Image ID:
    Ports:              53/UDP, 53/TCP
    Args:
      -machines=http://127.0.0.1:4001
      -addr=0.0.0.0:53
      -ns-rotate=false
      -domain=cluster.local.
    Limits:
      cpu:      100m
      memory:   200Mi
    Requests:
      cpu:                      100m
      memory:                   50Mi
    State:                      Waiting
      Reason:                   ContainerCreating
    Ready:                      False
    Restart Count:              0
    Volume Mounts:              <none>
    Environment Variables:      <none>
  healthz:
    Container ID:
    Image:              outrider/exechealthz
    Image ID:
    Port:               8080/TCP
    Args:
      -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
      -port=8080
    Limits:
      cpu:      10m
      memory:   20Mi
    Requests:
      cpu:                      10m
      memory:                   20Mi
    State:                      Waiting
      Reason:                   ContainerCreating
    Ready:                      False
    Restart Count:              0
    Volume Mounts:              <none>
    Environment Variables:      <none>
Conditions:
  Type          Status
  Initialized   True 
  Ready         False 
  PodScheduled  True 
Volumes:
  etcd-storage:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
QoS Class:      Burstable
Tolerations:    <none>
Events:
  FirstSeen  LastSeen  Count   From           SubObjectPath   Type          Reason          Message
  ---------  --------   -----   ----          -------------   --------        ------          -------
  12h      2m     32    {kubelet 172.25.1.24}                   Warning      FailedSync      Error syncing pod, 
  skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.  
details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)" 12h 9s 532 {kubelet k8s-node-3} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructure:latest\""
 

 

 

 

 

 

 

 

 

 

 







[root@master skydns]# kubectl get pod --namespace=kube-system NAME READY STATUS RESTARTS AGE kube-dns-v11-ey14j 4/4 Running 8 1d

8.查看skydns-svc.yml文件中定义的Service的信息。

[root@master skydns]# kubectl get svc -l k8s-app=kube-dns --namespace=kube-system
NAME       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kube-dns   10.254.254.254   <none>        53/UDP,53/TCP   1d

[root@master skydns]# kubectl get svc --namespace=kube-system -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kube-dns 10.254.254.254 <none> 53/UDP,53/TCP 2h k8s-app=kube-dns

 

 

9.测试DNS的效果。
•部署一个busybox的Pod
[root@master test]# cat busybox.yml

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always
复制代码

•验证kubernetes服务的地址解析,出现如下所示则证明DNS解析正常。

复制代码
[root@master test]# kubectl exec busybox nslookup kubernetes
Server:    10.254.254.254
Address 1: 10.254.254.254

Name:      kubernetes
Address 1: 10.254.0.1

 

posted @ 2019-10-10 18:05  ╰☆水の若蓝  阅读(348)  评论(0编辑  收藏  举报