首页 > 其他分享 >Kubernetes--Service资源的基础应用

Kubernetes--Service资源的基础应用

时间:2022-10-01 23:23:32浏览次数:44  
标签:Kubernetes Service -- svc myapp Pod 80 资源

Service资源的基础应用

首先Service资源本身并提供任何服务,其真正处理并响应客户端请求的是后端的Pod资源,这些Pod资源通常由各类控制器对象(ReplicaSet、Deployment、DaemonSet、Job、CronJob)所创建和管理,因此Service资源通常要与控制器资源(最为常用的控制器之一是Deployment)协同使用以完成应用的创建和对外的发布~

创建Service资源

  • 创建Service对象的常用方法有两种:
  • 一是直接使用“kubectl expose”(基于rc、service、deployment或pod创建Service资源)命令;
  • 另一个是使用资源配置文件,它与使用资源清单文件配置其他资源的方法类似~

 

定义Service资源对象时,spec的两个较为常用的的内嵌字段分别为selector和ports,分别用于定义使用的标签选择器和要暴露的端口。 下面的配置清单是一个Service的资源示例:

kind: Service
apiVersion: v1
metadata:
  name: myapp-svc
spec:
  selector:       #定义使用的标签选择器
    app: myapp
  ports:
  - protocol: TCP
    port: 80      #定义要暴露的端口
    targetPort: 80

Service资源myapp-svc通过标签选择器关联至标签为“app=myapp”的各Pod对象,它会自动创建名为myapp-svc的Endpoints资源对象,并自动配置一个ClusterIP,暴露的端口由port字段进行指定,后端各Pod对象的端口则由targetPort给出,也可以使用同port字段的默认值。

  • myapp-svc创建完成后,使用下面的命令即能获取相关的信息输出以了解资源的状态
]$ kubectl get svc myapp-svc
NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
myapp-svc   ClusterIP   10.108.17.20   <none>        80/TCP    7s

命令结果显示,myapp-svc的类型为默认的ClusterIP,其使用的地址自动配置为10.108.17.20。此类型的Service对象仅能通过此IP地址接受来自于集群内的客户端Pod中的请求。 若集群上存在标签为“app=myapp”的Pod资源,则它们将会被创建和关联,作为此Service对象的后端Endpoint对象,并负责接受相应的请求流量。

  • 类似下面的命令可用于获取Endpoint资源的端点列表,其相关的端点是由我之前创建Deployment控制器创建的Pod对象的套接字信息组成的:
]$ kubectl get endpoints myapp-svc 
NAME        ENDPOINTS                                      AGE
myapp-svc   10.244.1.14:80,10.244.1.15:80,10.244.2.26:80   23s

提示: 也可以不为Service资源指定 .spec.selector属性值,其关联的Pod资源可由用户手动创建Endpoints资源进行定义哦~

Service对象创建完成后即可作为服务被各客户端访问,但要真正相应这些请求,还是要依赖于各后端的资源对象。

向Service对象请求服务

Service资源的默认类型为ClusterIP,它仅能接受来自于集群中的Pod对象中的客户端程序的访问请求。

  • 下面创建一个专用的Pod对象,利用其交互式接口完成访问测试。为了简单起见,这里选择直接创建一个临时使用的Pod对象作为交互式使用的客户端进行,它使用CirrOS镜像,默认的命令提示符为“/#”:
]$ kubectl run cirros-$RANDOM --rm -it --image=cirros -- sh
/ # 

【CirrOS是设计用来进行云计算环境测试的Liunx微型发行版,它拥有HTTP客户端工具curl等】

而后,在容器的交互式接口中使用curl命令对myapp-svc服务的ClusterIP(10.108.17.20)和Port(80/tcp)发起访问请求测试:

/ # curl http://10.108.17.20:80/
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
/ # 

myapp容器中的“/hostname.html”页面能够输出当前容器的主机名,可反复向myapp-svc的此URL路径发起多次请求已验证其调度的效果:

/ # for loop in 1 2 3 4; do curl http://10.108.17.20:80/hostname.html; done
myapp-deploy-7ffb5fd5ff-zjnpk
myapp-deploy-7ffb5fd5ff-2s927
myapp-deploy-7ffb5fd5ff-5fvcb
myapp-deploy-7ffb5fd5ff-zjnpk
/ # 

当前Kubernetes集群的Service代理模式为iptables,它默认使用随机掉调度算法,因此 Service会将客户端请求随机调度至与其关联的某个后端Pod资源上。命令取样次数越大,其调度效果也越接近于短发的目标效果。

 

 

标签:Kubernetes,Service,--,svc,myapp,Pod,80,资源
From: https://www.cnblogs.com/zhangxin9/p/16747979.html

相关文章

  • Dockerfile-文件的复制与目录操作
    往镜像里复制文件有两种方式,COPY和ADD,我们来看一下两者的不同。复制普通文件COPY和ADD都可以把local的一个文件复制到镜像里,如果目标目录不存在,则会自动创建......
  • C++智能指针
    C++智能指针需要头文件<memory>不需要手动释放指针不是所有指针都能封装成智能指针,很多时候原始指针更加方便。std::unique_ptr任何时刻都只能有一个指针管理内存......
  • 国庆随笔
    十月了,步入大学学习已经三周了。学习方面,由于只有22学分,还是足够健康的,作业量没有特别大。但是相对不多的作业量也造成了一定的困扰,表现在效率方面。我做作业的速率曲线......
  • C语言学生的选课管理系统
    C语言学生的选课管理系统六、编制一个学生的选课管理系统【问题描述】现有若干个班级的学生,进行下学期课程的选课,任选5门课程录入课程信息(包括课程编号、课程名称、课......
  • HCIP-Datacom-Core 1.1实验 OSPF单区域
    前言:哈哈,我这个鸽子王又回来了! 1.1.1实验介绍实现单区域OSPF的配置 实现OSPF区域认证的配置 描述OSPF在多路访问网络中邻居关系建立的过程 实现对OSPF接口......
  • Java学生管理系统(未使用文件和清屏)
    Java的学生管理系统希望通过前面所学的类的封装知识和String类与ArrayList集合来实现一个简单的学生管理系统功能要求:添加、删除、修改、查看所有、退出注意:为了保证学......
  • Python下载-windows
    废话不多说,直接开始吧1.打开python官网下载链接直达链接打开的慢是正常状况,耐心等待即可下拉找到这个版本选择哪里选择你想要下载的版本我这里选的是3.8.4(个人喜好)......
  • SLAM之相机模型
    相机模型描述了一束光线通过针孔之后,在针孔背面投影成像的关系。相机透镜的存在会使得光线投影到成像平面的过程中产生畸变。因此,我们用针孔和畸变两个模型来描述整个投......
  • vim常用快捷键
    @目录启动vimvim命令模式移动光标复制操作剪切/删除撤销/恢复末行模式编辑模式高效运用vim工具的快捷键启动vimvim-rfile:恢复上次异常退出的文件;vim+file:从文......
  • C++ 编程中常用的英文单词(首字母是A、B、C开头)
    学习编程不一定需要英语水平很高,能记住认识一些常用的英文单词也可以,有看不明白的文档资料也可以使用翻译工具,编写代码时大部分好用的IDE都是有代码提示的。本文主要介绍C+......