• 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
  • 相关阅读:
    JAVA实现接口监控报警系统
    批量插入数据、自定义分页器
    django与Ajax
    ORM优化查询、choices参数
    django之查询操作及开启事务
    django之ORM字段及参数
    数据库设计
    django之模型层
    django之模板层
    django之视图层
  • 原文地址:https://www.cnblogs.com/xuanbao/p/11649715.html
Copyright © 2020-2023  润新知