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:

[[email protected] ~]# 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服务

[[email protected] ~]# systemctl restart kubelet.service

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

[[email protected] skydns]# cat kube-system.yml

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

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

[[email protected] skydns]# cat 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://192.168.30.20: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
[[email protected] skydns]# cat 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

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

?创建Namespace

[[email protected] skydns]# kubectl create -f kube-system.yml

?创建ReplicationController

[[email protected] skydns]# kubectl create -f skydns-rc.yml

?创建Service

[[email protected] skydns]# kubectl create -f skydns-svc.yml

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

[[email protected] 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的信息。

[[email protected] 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

9.测试DNS的效果。
?部署一个busybox的Pod
[[email protected] 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解析正常。

[[email protected] 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

*提示:kubernetes服务是kubernetes集群安装之后默认的一个服务。

时间: 2024-12-24 05:32:06

k8s入门系列之扩展组件(一)DNS安装篇的相关文章

k8s 入门系列之集群安装篇

关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 ?Kubernetes集群组件: - etcd 一个高可用的K/V键值对存储和服务发现系统 - flannel 实现夸主机的容器网络的通信 - kube-apiserver 提供kubernetes集群的API调用 - kube-controller-manager 确保集群服务 - kube-scheduler 调度容器,分配到Node - kubelet 在Node节点上按

Jenkins入门系列之——02第二章 Jenkins安装与配置

2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之--03PDF文档下载 第二章 Jenkins安装与配置 2 Jenkins安装 在最简单的情况下,Jenkins 只需要两个步骤: 1.下载最新的版本(一个 WAR 文件).Jenkins官方网址: http://Jenkins-ci.org/ 2.运行 java -jar jenkins.war 注意:

Provisioning Services 7.8 入门系列教程之二 基础环境安装

续Provisioning Services 7.8 入门系列教程之一 部署学习环境介绍 一.建立Windows Server 2012 R2虚拟机母盘. 1.在Hyper-V首先建立一台虚拟机,安装Windows Server 2012 R2,并进行相关设置后,关闭计算机. 2.设置上面所建立的虚拟机的虚拟磁盘的文件属性为"只读",作为以后建立相同操作系统虚拟机的母盘. 二.基础环境安装 计算机名:DDC(取这个名称是为了满足Citrix许可服务器安装的需要,因为笔者从CitRix网

Linux入门系列1--环境准备及Linux安装

"工欲善其事.必先利其器",本文作为"Linux零基础入门系列"开篇,将完整演示整个开发环境的安装和配置过程,为后续的开发和实验做好基础准备.如果您已安装好环境,可以直接跳过本文:如果您是第一次使用Linux,建议按照本文步骤进行操作. ps:网上已经有很多安装教程,但为了保证系列文章的完整性和可读性,特意从0开始搭建环境以供参考.安装和使用过程中,特别要注意环境及软件版本,因为不同版本的操作过程可能略有不同. 一.环境及软件准备 硬件条件:一般电脑就行 软件准备:

k8s入门系列之介绍篇

?Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是kubernetes Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性. Kubernetes优势: - 容器编排 - 轻量级

快速入门系列--Log4net日志组件

Log4net是阿帕奇基金会的非常流行的开源日志组件,是log4j的.NET移植版本,至今已经有11年的历史,使用方便并且非常稳定,此外很重要的一点是其和很多开源组件能很好的组合在一起工作,例如NHibernate等.对于以本地日志为主的中小型的项目,Log4net已经足够使用,当然涉及跨平台的大型分布式系统可以选择Elmah等其他日志组件. 在这里,主要介绍log4net的一些关键知识点,详细内容可见以下链接: 官方配置文档:http://logging.apache.org/log4net/

Android入门系列:UI组件:布局管理器:GridLayout

写一个计算器的示例,布局文件如下: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent&q

[寒江孤叶丶的CrossApp之旅_11][入门系列]通过Demo学习CrossApp之SecondViewController篇

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的CrossApp之旅系列] 博客地址:http://blog.csdn.net/qq446569365 本文章是我在读Demo时候随手写的注释,分享出来供大家交流探讨.如有不对之处欢迎指出! SecondViewController.h #ifndef _Second_ViewController_h_ #define _Second_ViewController_h_ #include <iostream> #include "

OpenFaceswap 入门教程(1):软件安装篇

---恢复内容开始--- 众多换脸软件中,DeepFaceLab其实是安装和使用最方便,更新最快的,但是由于其没有可是化界面,对于很新手来说,可能入门还是有点难度.那么今天就来介绍一款操作极其直观和简单的换脸软件OpenFaceSwap.这款软件的安装和使用体验和Fakeapp类似,但是软件内核“先进”很多,因为Fakeapp已经停更很久了,而OpenFaceSwap的内核一直在更新. OpenFaceSwap是什么? Openfaceswap 基于开源软件Faceswap而定制的图形界面版本.