Service概述
为何需要 Service
Kubernetes 中 Pod 是随时可以消亡的(节点故障、容器内应用程序错误等原因)。如果使用 Deployment 运行您的应用程序,Deployment 将会在 Pod 消亡后再创建一个新的 Pod 以维持所需要的副本数。每一个 Pod 有自己的 IP 地址,然而,对于 Deployment 而言,对应 Pod 集合是动态变化的。
这个现象导致了如下问题:
- 如果某些 Pod(假设是 'backends')为另外一些 Pod(假设是 'frontends')提供接口,在 'backends' 中的 Pod 集合不断变化(IP 地址也跟着变化)的情况下,'frontends' 中的 Pod 如何才能知道应该将请求发送到哪个 IP 地址?
Service 存在的意义,就是为了解决这个问题。
# Kubernetes Service
Kubernetes 中 Service 是一个 API 对象,通过 kubectl + YAML 或者 Kuboard,定义一个 Service,可以将符合 Service 指定条件的 Pod 作为可通过网络访问的服务提供给服务调用者。
Service 是 Kubernetes 中的一种服务发现机制:
- Pod 有自己的 IP 地址
- Service 被赋予一个唯一的 dns name
- Service 通过 label selector 选定一组 Pod
- Service 实现负载均衡,可将请求均衡分发到选定这一组 Pod 中
例如,假设有一个无状态的图像处理后端程序运行了 3 个 Pod 副本。这些副本是相互可替代的(前端程序调用其中任何一个都可以)。在后端程序的副本集中的 Pod 经常变化(销毁、重建、扩容、缩容等)的情况下,前端程序不应该关注这些变化。
Kubernetes 通过引入 Service 的概念,将前端与后端解耦。
在 Kuboard 中使用 Service
从 Kuboard 工作负载编辑器的视角来看,Service 与其他重要的 Kubernetes 对象之间的关系如下图所示:
图中,Service 先连线到 Controller,Controller 在连线到容器组,这种表示方式只是概念上的,期望用户在使用 Kubernetes 的时候总是通过 Controller 创建 Pod,然后再通过 Service 暴露为网络服务,通过 Ingress 对集群外提供互联网访问。
事实上,Service 与 Controller 并没有直接联系,Service 通过 label selector 选择符合条件的 Pod,并将选中的 Pod 作为网络服务的提供者。从这个意义上来讲,您可以有很多种方式去定义 Service 的 label selector,然而,最佳的实践是,在 Service 中使用与 Controller 中相同的 label selector。如上图所示。
TIP
使用 Kubernetes 的最佳实践:
Service 与 Controller 同名
Service 与 Controller 使用相同的 label selector
在 Kuboard 中创建工作负载时,工作负载的名字(服务名称字段)将作为 Deployment(StatefulSet/DaemonSet)的名字,也将作为 Service、Ingress 的名字
[root@master ~]# kubectl get pods -n ocp -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cloud-eureka-0 1/1 Running 1 22h 10.100.171.102 worker <none> <none>
cloud-eureka-1 1/1 Running 1 22h 10.100.171.97 worker <none> <none>
cloud-eureka-2 1/1 Running 1 22h 10.100.171.75 worker <none> <none>
cloud-redis-0 1/1 Running 1 24h 10.100.171.90 worker <none> <none>
db-auth-center-0 1/1 Running 1 24h 10.100.171.70 worker <none> <none>
db-log-center-0 1/1 Running 1 24h 10.100.171.99 worker <none> <none>
db-user-center-0 1/1 Running 1 24h 10.100.171.73 worker <none> <none>
gateway-api-55d8f876f5-wjbks 1/1 Running 1 22h 10.100.171.91 worker <none> <none>
svc-auth-server-6cd596f4cc-sslzj 1/1 Running 1 22h 10.100.171.103 worker <none> <none>
svc-user-center-5f8bb5c4c4-hq7sr 1/1 Running 1 22h 10.100.171.77 worker <none> <none>
web-back-center-665f59cbbc-vh7ck 1/1 Running 1 23h 10.100.171.72 worker <none> <none>
[root@master ~]# kubectl get service -n ocp -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
cloud-eureka NodePort 10.96.150.116 <none> 1111:31111/TCP 25h k8s.eip.work/layer=cloud,k8s.eip.work/name=cloud-eureka
cloud-redis ClusterIP 10.96.242.0 <none> 6379/TCP 24h k8s.eip.work/layer=cloud,k8s.eip.work/name=cloud-redis
db-auth-center ClusterIP 10.96.62.160 <none> 3306/TCP 24h k8s.eip.work/layer=db,k8s.eip.work/name=db-auth-center
db-log-center ClusterIP 10.96.70.39 <none> 3306/TCP 24h k8s.eip.work/layer=db,k8s.eip.work/name=db-log-center
db-user-center ClusterIP 10.96.71.151 <none> 3306/TCP 24h k8s.eip.work/layer=db,k8s.eip.work/name=db-user-center
gateway-api ClusterIP 10.96.10.43 <none> 9200/TCP 23h k8s.eip.work/layer=gateway,k8s.eip.work/name=gateway-api
svc-auth-server ClusterIP 10.96.238.226 <none> 8000/TCP 24h k8s.eip.work/layer=svc,k8s.eip.work/name=svc-auth-server
svc-user-center ClusterIP 10.96.209.141 <none> 7000/TCP 23h k8s.eip.work/layer=svc,k8s.eip.work/name=svc-user-center
web-back-center ClusterIP 10.96.7.72 <none> 80/TCP 23h k8s.eip.work/layer=web,k8s.eip.work/name=web-back-center
[root@master ~]# kubectl get ingress -n ocp -o wide
NAME CLASS HOSTS ADDRESS PORTS AGE
cloud-eureka <none> cloud-eureka.ocp.demo.kuboard.cn 80 25h
gateway-api <none> api-gateway.ocp.demo.kuboard.cn 80 23h
svc-auth-server <none> svc-auth-server.ocp.demo.kuboard.cn 80 24h
svc-user-center <none> svc-user-center.ocp.demo.kuboard.cn 80 24h
web-back-center <none> back-center.ocp.demo.kuboard.cn 80 23h
Service概述的更多相关文章
- Android---55---Web Service概述
Web Service 是什么? /*w3school*/ Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-co ...
- Android中Service概述
Service是Android中一种非常重要的组件,一般来说有两种用途:用Service执行长期执行的操作,而且与用户没有UI界面的交互:某个应用程序的Service能够被其它应用程序的组件调用以便提 ...
- Web Service概述 及 应用案例
Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用 ...
- Android四大核心组件之Service
实验内容 启动Service 绑定Service 与Service进行通信 实验要求 启动Service 绑定Service 与Service进行通信 实验步骤 Service概述 Service通常 ...
- C#写Windows Service(windows服务程序)
背景: 要学习使用一个新东西,我们必须知道他是个什么东西.对于我们此次研究的windows服务来说,他又是个什么东西,其实也没有什么高深的了. windows service概述: 一个 ...
- 使用mybatis完成通用dao和通用service
使用mybatis完成通用dao和通用service 概述: 使用通用dao和通用service可以减少代码的开发.可以将常用的增删改查放到通用dao中.对不同的or框架,基本上都有自己的实现如Spr ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
随机推荐
- ETL工具 Flume (一)
分布式日志采集系统Flume学习 一.Flume架构 1.1 Hadoop业务开发流程 1.2 Flume概述 flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. 支持在日志系统 ...
- 精心总结十三条建议,帮你创建更合适的MySQL索引
上篇文章讲到使用MySQL的Explain命令可以分析SQL性能瓶颈,优化SQL查询,以及查看是否用到了索引. 我们都知道创建索引可以提高查询效率,但是具体该怎么创建索引? 哪些字段适合创建索引? 哪 ...
- PKUSC 2022 口胡题解
\(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...
- MES对接Simba实现展讯平台 IMEI 写号与耦合测试
文章开始之前,必须对Simba工具点一个大大的赞,Simba为了适应市面上不同厂家开发的 MES 系统,特地开发了统一的接口,各个 MES 厂家只需要按照接口规范去做开发,然后将中间件加载到 Simb ...
- SQL Server查询优化
从上至下优化 看过一篇文章,印象深刻,里面将数据库查询优化分为四个大的方向 使用钞能力--给DB服务器加物理配置,内存啊,CPU啊,硬盘啊,全上顶配 替换存储系统--根据实际的业务情况选择不同的存储数 ...
- Luogu5019 铺设道路 (贪心)
水题,水得好无语 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...
- ATOM使用的一点心得与技巧——在一个窗口打开多个项目
atom作为一个后起之秀,我个人是觉得越用越好用.虽然sublimet也很棒,但是在ubuntu里不能使用中文很是恼火.网上关于修复这个bug的办法实在太多了.果断选择省事的atom.虽然比起subl ...
- java学习第一天.day06
方法 方法的优点 1. 使程序变得更简短而清晰. 2. 有利于程序维护. 3. 可以提高程序开发的效率. 4. 提高了代码的重用性. static的作用 static在方法中如果没有添加就只能用对象调 ...
- Magicodes.Pay已支持Volo Abp
Magicodes.Pay已支持Volo Abp 简介 Magicodes.Pay希望打造一个统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前已 ...
- Java SE 15 新增特性
Java SE 15 新增特性 作者:Grey 原文地址:Java SE 15 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...