【三小时学会Kubernetes!(三) 】Service实践
服务Service
Kubernetes 服务资源可以作为一组提供相同服务的 Pod 的入口。这个资源肩负发现服务和平衡 Pod 之间负荷的重任,如图 16 所示。

图16:Kubernetes 服务维护 ID 地址
在 Kubernetes 集群内,我们拥有提供不同服务的 Pod(前端、Spring 网络应用和 Flask Python 应用程序)。所以这里的问题是:服务如何知道该处理哪个 Pod?例如:它如何生成这些 Pod 的终端列表?
这个问题可以用标签来解决,具体分两个步骤:
- 给所有服务处理的对象 Pod 贴上标签;
- 在服务中使用一个选择器,该选择器定义了所有贴有标签的对象 Pod。
下列视图看起来更清晰:

图17:带有标签的 Pod 和它们的清单文件
我们可以看到 Pod 都贴着标签“app: sa-frontend”,服务用这个标签找到目标 Pod。
标签
标签提供了一种简单的方法用于管理Kubernetes资源。它们有一对键值表示,且可以用于所有资源。按照图17中的例子,修改清单文件。
在修改完毕后保存文件,并通过如下命令应用这些变更:
kubectl apply -f sa-frontend-pod.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply pod "sa-frontend" configured kubectl apply -f sa-frontend-pod2.yaml Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply pod "sa-frontend2" configured
我们看到了一个警告(在应用的时候,而非创建,明白了)。在第二行我们看到部署了 pod “sa-frontend”和 “sa-frontend2”。我们可以过滤想要查看的 Pod:
kubectl get pod -l app=sa-frontend NAME READY STATUS RESTARTS AGE sa-frontend 1/1 Running 0 2h sa-frontend2 1/1 Running 0 2h
验证带有标签的 Pod 的另一种方法是在上述命令中加入标志符 --show-labels,那么结果中会显示每个 Pod 的所有标签。
很好!Pod 已经贴上了标签,我们准备好通过服务找到它们了。让我们定义 LoadBalancer 类型的服务,如图 18 所示。

图18:用 LoadBalancer 服务平衡负荷
服务的定义
LoadBalancer 服务的 YAML 定义如下所示:
apiVersion: v1
kind: Service # 1
metadata:
name: sa-frontend-lb
spec:
type: LoadBalancer # 2
ports:
- port: 80 # 3
protocol: TCP # 4
targetPort: 80 # 5
selector: # 6
app: sa-frontend # 7
#1 kind:服务;
#2 type:指定类型,我们选择 LoadBalancer,因为我们想平衡 Pod 之间的负荷;
#3 ports:指定服务获取请求的端口;
#4 protocol:定义交流;
#5 targetPort:可以将来访的请求转发到这个端口;
#6 selector:包含选择pod属性的对象;
#7 app:sa-frontend定义了哪个是目标 Pod,只有拥有标签“app: sa-frontend”的才是目标 Pod。
通过运行如下命令创建服务:
kubectl create -f service-sa-frontend-lb.yaml service "sa-frontend-lb" created
可以通过运行如下命令检查的服务的状态:
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sa-frontend-lb LoadBalancer 10.101.244.40 <pending> 80:30708/TCP 7m
External-IP 处于 pending 状态(不用再等了,这个状态不会变的)。这是因为我们使用的是 Minikube。如果我们在 Azure 或 Google 云服务上运行,那么我们可以得到一个公开的 IP,那么全世界都可以访问我们的服务了。
尽管如此,Minikube 也不会置我们于不顾,它提供一个非常有用的本地调试命令,如下所示:
minikube service sa-frontend-lb Opening kubernetes service default/sa-frontend-lb in default browser...
这可以在浏览器中打开指向该服务的 IP。服务受到请求后,会将请求转发给其中一个 Pod(不用理会是哪个)。通过利用服务作为访问入口,这种抽象可以让我们看到并将多个 Pod 当成一个来交互。
服务的总结
在本节中,我们介绍了给资源贴标签,在服务中使用标签作为选择器,我们还定义并创建了一个 LoadBalancer 的服务。这满足了我们希望伸缩应用程序规模的需求(只需加入新的贴了标签的 Pod),并通过将服务作为访问入口在 Pod 之间做负载均衡。\
来自:CSDN(微信号:CSDNnews),作者:Rinor Maloku,译者:弯月,责编:郭芮
【三小时学会Kubernetes!(三) 】Service实践的更多相关文章
- 三小时学会Kubernetes:容器编排详细指南
三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...
- [转载]三小时学会Kubernetes:容器编排详细指南
原翻译by梁晓勇 原英文:Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers 我很奇怪,为什 ...
- 【三小时学会Kubernetes!(四) 】Deployment实践
Deployment 部署 Kubernetes 部署可以帮助每一个应用程序的生命都保持相同的一点:那就是变化.此外,只有挂掉的应用程序才会一尘不变,否则,新的需求会源源不断地涌现,更多代码会被开发出 ...
- 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践
Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...
- 【三小时学会Kubernetes!(五) 】完成整个架构
完成整个架构 现在我们学习了完成架构的所有必须的资源,因此这一节会非常快.图 22 中灰色的部分是需要做的事情.让我们从底部开始:部署 sa-logic 的部署. 图 22:当前应用程序状态 部署 S ...
- 【三小时学会Kubernetes!(零) 】系统结构及相关示例微服务介绍
写在前面 牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻,我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说 — — 以 ...
- 【三小时学会Kubernetes!(一) 】容器简介及为每个服务创建镜像
容器是什么 Kubernetes 是容器管理平台.可想而知我们需要容器去管理它们.但是容器是什么?Docker 官方文档的最佳答案如下: 容器映像是轻量级的.独立的.可执行软件包,包含所有可运行的东西 ...
- 三小时攻克 Kubernetes!
我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说——牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻. 以下为译文: 为 ...
- 2017-2018-2 20165315 实验三《敏捷开发与XP实践》实验报告
2017-2018-2 20165315 实验三<敏捷开发与XP实践>实验报告 一.编码标准 编写代码一个重要的认识是"程序大多时候是给人看的",编程标准使代码更容易阅 ...
随机推荐
- oracle入门(5)——java连接oracle数据库
[本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安 ...
- 简单认识TCP/IP协议
HTTP协议—— 简单认识TCP/IP协议 本文转自: https://www.cnblogs.com/roverliang/p/5176456.html 大学没读计算机专业,所以很多的专业知识都 ...
- 使用jQuery创建节点、将节点插入到指定的位置
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 前端须知的http header
文件信息: Content-Type: application/x-javascript Content-Length: 2000 Content-Type:指定请求和响应的内容类型,如果未指定即为t ...
- 一、html
一.html相关概念 html是 htyper text markup language 即超文本标记语言,超文本就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素,而标记语言:即标记(标签) ...
- jquery模拟点击A标签的问题
我尝试过多次用jQuery模拟用户点击a标签的功能,但都没有成功,并且困扰了很久. 先看下边的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <htm ...
- Linux系统——vim编辑器
一.Linux系统中最常用的文本编辑器 vi:类Unix系统中默认的文本编辑器 vim:vi编辑器的增强版 作用:创建或修改文本文件:维护Linux系统中各种配置文件 二.三种切换模式命令模式输入模式 ...
- maven工具使用之常用maven命令(二)
1.创建java web项目: # mvn archetype:generate -DgroupId=com.igoodful.sdxs -DartifactId=hubu -Darche ...
- JavaScript-dom1
获取事件源 var div = document.getElementById("box"); // var arr1 = document.getElementsByTagNam ...
- kdump+crash
参考:http://www.360doc.com/content/19/0205/08/36367108_813163495.shtml https://blog.csdn.net/u01436103 ...