什么是Headless Services

Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP。也被称为无头服务。

Headless Services使用场景

第一种:自主选择权,有时候client想自己决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息

第二种:headless service关联的每个endpoint(也就是Pod),都会有对应的DNS域名;这样Pod之间就可以互相访问

基于上面的两个例子,kubernates增加了headless serivces功能,也就是该service对外无提供ClusterIP。下面我们看看它如何配置的:

实例如下:
1: 创建namespace

[root@bogon ~]# vim mysql-space.yaml apiVersion: v1
kind: Namespace
metadata:name: mysql-spacelabels:name: mysql-space

2: 创建RC

[root@bogon ~]# vim mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: mysql-balance-rcnamespace: mysql-spacelabels:name: mysql-balance-rcspec:replicas: 2selector:name: mysql-balance-podtemplate:metadata:labels:name: mysql-balance-podspec:containers:- name: mysqlimage: mysql:5.7imagePullPolicy: IfNotPresentports:- containerPort: 3308env:- name: MYSQL_ROOT_PASSWORDvalue: "mysql123"

自动创建了两个pod

[root@bogon ~]# kubectl get pod -n mysql-space
NAME                     READY   STATUS    RESTARTS   AGE
mysql-balance-rc-h4x6m   1/1     Running   0          5m47s
mysql-balance-rc-jcl67   1/1     Running   0          5m47s

3: 创建Headless service

[root@bogon ~]# vim mysql-service.yaml apiVersion: v1
kind: Service
metadata:name: mysql-balance-svcnamespace: mysql-spacelabels:name: mysql-balance-svc
spec:ports:- port: 3308protocol: TCPtargetPort: 3306clusterIP: Noneselector:name: mysql-balance-pod

没有分配clusterIP

[root@bogon ~]# kubectl get svc -n mysql-space
NAME                TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
mysql-balance-svc   ClusterIP   None         <none>        3308/TCP   51s

查看详情:
ClusterIP没有了,并且代理两个Endpoints 172.17.0.2:3306,172.17.0.3:3306 这个两个ip就是pod的ip

[root@bogon ~]# kubectl describe svc mysql-balance-svc -n mysql-space
Name:              mysql-balance-svc
Namespace:         mysql-space
Labels:            name=mysql-balance-svc
Annotations:       <none>
Selector:          name=mysql-balance-pod
Type:              ClusterIP
IP:                None
Port:              <unset>  3308/TCP
TargetPort:        3306/TCP
Endpoints:         172.17.0.2:3306,172.17.0.3:3306
Session Affinity:  None
Events:            <none>

操作其中一个mysql:

[root@server01 ~]# mysql -h 172.17.0.2 -uroot -pmysql123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.31 MySQL Community Server (GPL)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]>

其实一般headless services一般结合StatefulSet来部署有状态的应用,比如kafka集群,mysql集群,zk集群等。

为什么要用headless service+statefulSet部署有状态应用?

  1. .headless service会为关联的Pod分配一个域
    .$.svc.cluster.local
  2. StatefulSet会为关联的Pod保持一个不变的Pod Name
    statefulset中Pod的hostname格式为(StatefulSetname)−(StatefulSet name)-(StatefulSetname)−(pod序号)
  3. StatefulSet会为关联的Pod分配一个dnsName
    <PodName>.<Pod Name>.<PodName>..$.svc.cluster.local

Headless Services相关推荐

  1. Headless Services无头服务

    一.Headless Services介绍 Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP. ...

  2. dns提供商主机名_在 Kubernetes 中使用 DNS 和 Headless Service 发现运行中的 Pod

    作者:Mattias te Wierik 翻译:Bach(才云) 校对:星空下的文仔(才云).bot(才云) 在 Kubernetes 集群中,Service 是将运行在一组 Pods 上的应用程序公 ...

  3. Services in Kubernetes

    https://segmentfault.com/a/1190000008114183 概述 kubernetes中pods是平凡的,可创建可销毁而且不可再生. ReplicationControll ...

  4. [k8s] 第七章 Service详解

    本章节主要介绍kubernetes的流量负载组件:Service和Ingress. Service介绍 ​ 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但 ...

  5. Kubernetes(7) Service Network (advanced)

    从上一章节我们做了一个Service提供服务给单节点Redis数据库的实验.在这一章我们要深入Service中去,来弄清Service的工作原理. 1 Kubernetes 如何向客户端提供网络功能 ...

  6. Dubbo 在 K8s 下的思考

    作者 | 曹胜利 Apache Dubbo PMC 导读:Dubbo 作为高性能 Java RPC 框架的刻板印象早已深入人心,在 Cloud Native 的架构选型上,Spring Cloud 或 ...

  7. 基于Neutron的Kubernetes SDN实践经验之谈

    首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规 ...

  8. kubernetes怎么读_Kubernetes之有状态应用实践-搭建MySQL集群

    零.前情纪要 上一遍文章Kubernetes集群搭建已经带大家成功搭建了Kubernetes集群,可能有不少人在搭建过程中对很多概念性的东西还是很模糊,接下来这篇文章将通过带领大家一起搭建一个高可用的 ...

  9. 容器编排技术 -- Kubernetes StatefulSet基本使用

    容器编排技术 -- Kubernetes StatefulSet基本使用 1 Objectives 2 Before you begin 2.1 顺序创建 Pod 3 Pods in a Statef ...

最新文章

  1. 一生中用来开会的时间,你知道有多久吗?
  2. 数位dp 的简单入门
  3. 云计算运维累不累_关于云计算运维管理要点的知识分享
  4. 2016 CCPC 杭州
  5. oracle 把逗号分隔符,oracle 分逗号分隔字符串函数
  6. jenkins插件更换源_jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
  7. Verilog语言生成4位伪随机码
  8. creo外观库_Proe/Creo外观着色与贴图
  9. thinkphp集成editormd一系列实战
  10. 2020阿里巴巴实习笔试题一
  11. 台式计算机操作系统的安装方法,台式电脑显卡散热器的更换及安装方法教程[多图]...
  12. LiveMedia视频平台与第三方国标平台级联对接异常断流
  13. 分段函数的期望和方差_导数排列组合期望方差.doc
  14. png转svg格式并上传至iconfont
  15. Z-Turn-Lite Board Linux开发-u-boot开篇
  16. 为什么老派摄影师认为您只是个时髦的时髦
  17. 从零开始,一步一步编写网页
  18. 【实战案例】分享6种常用的信用卡欺诈检测算法(附 Python 代码)
  19. eclipse中的javaEE插件
  20. 机械加工工艺装备基本术语

热门文章

  1. 一键启停hive脚本
  2. 快钱联手浩方 开拓网络游戏运营
  3. vc20++中使用scanf等函数8出现报错时解决方法
  4. python获取pydoc
  5. uefi读硬盘和分区数据
  6. JMeter 软件测试基础
  7. 【教3妹学算法-leetcode】数组能形成多少数对
  8. CSS实现背景图片详解全屏铺满自适应的方式
  9. spring cloud学习,转载自纯洁的微笑
  10. 表白词上了宿舍墙!这么玩儿,你班主任知道吗?_数字体验_新浪博客