Kubernetes学习笔记-kubernetes应用扩展(2)-使用kubernetes服务目录扩展kubernetes20230623

news2024/12/22 19:50:14

一、服务目录介绍

服务目录就是列出所有的服务的目录。用户可以浏览目录并自行设置目录中列出的服务实例,无须处理服务运行所需的pod、service、configmap和其他资源。这听起来和自定义网站资源很类似。

服务目录并不会为每种服务类型的api服务器添加自定义资源,而是讲一下四种通用API资源引入其中:

  • 一个ClusterServiceBroker,描述一个可以提供服务的(外部)系统
  • 一个ClusterServiceClass,描述一个可供应的服务类型
  • 一个ServiceInstance,已配置服务的一个实例
  • 一个ServiceBinding,表示一组客户端(pod)和ServiceInstance之间的绑定

 

集群管理员会为每个服务代理创建一个ClusterServiceBroker资源,而这些服务代理需要在集群中提供他们的服务。接着,kubernetes从服务代理获取他们可以提供的服务列表,并为他们中的每个服务创建一个ClusterServiceClass资源。当用户调配服务时,首先需要创建一个ServiceInstance资源,然后创建一个ServiceBinding以将该ServiceInstance绑定到他们的pod。下一步,泽泻pod会被注入一个Secret,该Secret包含连接到配置的ServiceInstance所需的凭证和其他数据。

二、服务目录API服务器与控制器管理器介绍

与核心kubernetes类似,服务目录也是有三个组件组成的分布式系统:

  • 服务目录API服务器
  • 作为存储的etcd
  • 运行所有控制器的控制器管理器

之前所介绍的四个服务目录相关的资源数通过YAML/JSON清单发布到API服务器来创建的。随后,API服务器会将他们存储到自己的etcd实例中,或者使用主API服务器中的CRD作为替代存储机制(这种情况下不需要额外的etcd实例)

控制器本身不提供所请求的服务,而是将其留给外部服务代理,再由代理通过在服务目录API中创建ServiceBroker资源进行注册。

三、Service代理和OpenServiceBroker API

集群管理员可以在服务目录中注册一个或多个外部ServiceBroker。同时,每个代理都必须实施OpenServiceBroker API。

OpenServiceBroker API介绍

通过OpenServiceBroker API,服务目录可以通过API与broker进行通信,这个简单的REST API,能够提供以下功能:

使用GET/v2/catalog检索服务列表

配置服务实例(PUT/v2/service_instances/:id)

更新服务实例(PATH/v2/service_instaces/:id)

绑定服务实例(PUT/v2/service_instances/:id/service_bindings/:binding_id)

解除绑定实例(DELETE/v2/service_instances/:id/service_bindings/:binding_id)

取消服务实例配置(DELETE/v2/service_instances/:id)

在服务目录中注册代理

集群管理员可通过向服务目录API发布ServiceBroker资源清单来注册代理

一个ClusterServiceBroker清单:database-broker.yaml

apiVersion:servicecatalog.k8s.io/v1alpha1

metadata:

        name:database-broker

spec:

        url:http://database-osbapi.myorganizations.org

如上代码清单,描述了一个可以提供不同类型数据库的虚拟代理。在管理员创建ClusterServiceBroker资源后,Service Catalog Controller Manager中的控制器就会连接到资源中指定的URL,并且检索此代理可以提供的服务列表。

在检索服务列表后,就会为每个服务创建一个ClusterServiceClass资源。每个ClusterServiceClass资源都描述一个可供应的服务。每个ClusterServiceClass都有一个或多个与之关联的服务方案。用户可以根据他们需要的服务级别选择不同的方案。

罗列集群中的可用服务

$kubectl get serviceclasses

四、提供服务与使用服务

提供服务

想预分配数据库,需要做的是创建一个ServiceInstance资源

ServiceInstance列表:database-instance.yaml

apiVersion:servicecatalog.k8s.io/v1alpha1

kind:ServiceInstance

metadata:

        name:my-postgres-db

spec:

        clusterServiceClassName:postgres-database

        clusterServicePlanName:free

        parameters:

                init-db-args:--data-checksums 

  如上创建一个名为my-postgres-db的ServiceInstance,并且指定ClusterServiceClass、选定方案。还需要指定一个明确的broker和ClusterServiceClass需要的参数。

一旦创建了这个资源,服务目录就要求ClusterServiceClass所属的代理来调配服务,它将传递你选择的ClusterServiceClass、计划名称以及指定的所有参数。

接下来,采取何种方法处理这些信息完全由代理决定。

检查创建的my-postgres-db  ServiceInstance的status来检查是否已经成功提供服务。

$kubectl get instance my-postgres-db -o yaml

绑定服务实例

想要在pod中使用配制的ServiceInstance,可以创建绑定资源,如下为代码清单

ServiceBinding:my-postgres-db-binding.yaml

apiVersion:servicecatalog.k8s.io/v1alpha1

kind:ServiceBinding

metadata:

        name:my-postgres-db-binding

spec:

        instanceRef:

                name:my-postgres-db

         secretName:postgres-secret

如上代码,定义一个名为my-postgres-db-binding的ServiceBinding资源,其中引用了之前创建的my-postgres-db服务实例,挺尸也命名了一个secret。

在将ServiceBinding资源从先前的列表提交到服务目录API服务器时,控制器会再次联系数据库代理,并为之前配置的ServiceInstance创建一个绑定。作为响应,这时候代理会返回以链接到数据库中所需的凭证和其他数据。随后,服务目录会使用ServiceBinding资源中指定的名称创建一个新的Secret,并将所有数据存储在Secret中。

在客户端pod中使用新创建的Secret

服务目录系统创建的Secret可以装载到pod中,这样Secret就可以读取其中的内容并使用他们连接到配置好的服务实例。

一个持有连接到服务实例的凭证的Secret

$kubectl get secret postgres-secret -o yaml

apiVersion:v1

data:

        host:<base64-encoded hostname of the database>

        username:<base64-encoded username>

        password:<base64-encoded password>

kind:Secret

metadata:

        name:postgres-secret

        namespace:default

...

type:Opaque

五、解除绑定与取消配置

不再需要服务绑定,可以按照删除其他资源的方式将其删除

$kubectl delete servicebinding my-postgres-db-binding

这时候,服务目录控制器将删除秘钥并通知代理解除绑定,而服务实例仍会运行。因此,你可以创建一个新的服务绑定。

如果不再需要数据库实例,就可以一并删除服务实例资源

$kubectl delete serviceinstance my-postgres-db

删除ServiceInstance资源后,服务目录就会在服务代理上执行取消配置的操作。同样,尽管取消配置带来的后果由代理决定,但你应该让代理关闭调配服务实例时创建的postgresSQL数据库实例

六、服务目录给我们带来了什么

服务提供者可以通过在任何kubernetes集群中注册代理,在该集群中暴露服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全栈开发实战那些事

文章目录 一个网站是怎么来的&#xff1f; Git篇隔离项目和原有Git工程联系Git冲突的原因通常有以下几种&#xff1a; IDEA篇IDEA常用操作Git可视化操作&#xff08;提交代码前先pull更新merge最新版本一下再push&#xff0c;保证提交的最终项目是最新&#xff09; IDEA中Git冲…

Jenkins 发送文件到远程服务器:Publish Over SSH 插件

Jenkins 发送文件到远程服务器&#xff1a;Publish Over SSH 插件 文章目录 Jenkins 发送文件到远程服务器&#xff1a;Publish Over SSH 插件一、Publish Over SSH 插件1、概述2、主要功能和特点3、插件主页4、安装 Publish Over SSH 插件5、配置远程主机 二、发送文件到远程主…

Python基础篇(七):面向对象的编程思想

面向对象 前言1. 面向对象编程思想1.1 面向对象的相关概念1.2 面向对象的三大特性 2. 类的定义2.1 使用class关键字定义类2.2 创建类对象并调用属性和方法 3.面向对象思想示例3.1 详细示例&#xff1a;图形类的设计3.2 基类 Shape3.3 子类 Circle3.4 子类 Rectangle3.5 使用图形…

【Java-SpringBoot+Vue+MySql】Day5-前端进阶

目录 一、Axios网络请求 中文文档&#xff1a; 安装&#xff1a; 导入&#xff1a; 使用方法&#xff1a; 基本语法&#xff1a; 生命周期函数&#xff1a; 二、前端路由VueRouter 视频&#xff1a;12.前端路由VueRouter_哔哩哔哩_bilibili 参考文档: 三、状态管理VueX …

Linux设备驱动程序(三)——字符驱动

文章目录 前言一、scull 的设计二、主设备号和次设备号1、设备编号的内部表达2、分配和释放设备编号3、主编号的动态分配 三、一些重要的数据结构1、文件操作&#xff08;file_operation&#xff09;2、文件结构&#xff08;struct file&#xff09;3、inode 结构 四、字符设备…

【软件设计师暴击考点】黄金五题套路拿

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

AutoSAR系列讲解(入门篇)2.1-AppL概述

AppL概述 开局一张Autosar的框架图&#xff1a; 一、AppL的组成 二、先来举个例子 三、SWC的通信 四、SWC的分配 开局一张Autosar的框架图&#xff1a; 一、AppL的组成 AppL中最重要的就是SWC了&#xff0c;而SWC与其他SWC通信需要接口&#xff0c;每个SWC中又由runnable…

【C++篇】OOP上部分:封装类和对象

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

C++【STL】之反向迭代器

反向迭代器 前面在vector和list的模拟实现中都有讲到正向迭代器&#xff0c;今天我们就来讲解一下反向迭代器的思想和模拟实现&#xff0c;在某些场景下还是很实用的&#xff0c;下面正文直接开始。 文章目录&#xff1a; 反向迭代器1. 反向迭代器结构2. 反向迭代器实现2.1 多…

一起学AI:核心基础概念

一起学AI&#xff1a;核心基础概念 AI基础概念什么是学习率&#xff1f;batchsize和epoch分别是什么&#xff1f;梯度消失与梯度爆炸是什么&#xff1f;什么是过拟合、欠拟合和泛化&#xff1f;归一化、正则化、标准化是什么&#xff1f;线性回归和逻辑回归是什么&#xff1f;神…

端午特别征文

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 韩顺平教育的java坦克大战 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Java绘图技术 1.g.drawOval()是什么&#xff1f; 画椭圆函数g.drawOval(); (宽高时候为圆形) …

Kafka系列之:一次性传送和事务消息传递

Kafka系列之&#xff1a;一次性传送和事务消息传递 一、目标二、关于事务和流的一些知识三、公共接口四、示例应用程序五、新配置六、计划变更1.幂等生产者保证2.事务保证 七、关键概念八、数据流九、授权十、RPC 协议总结1.获取请求/响应2.生产请求/响应3.ListOffset请求/响应…

GIT —— 基本操作,分支管理,远程操作

GIT 企业开发 最近找实习&#xff0c;在完善简历&#xff0c;遂发一发存货&#xff0c;有待持续完善&#xff0c;我认为这部分非常的有意义 1. 基本操作 1.1 创建&#xff0c;配置本地仓库 创建 mkdir gitcode cd gitcode git init配置 git config user.name "bts&quo…

HTTP 超文本传输协议

1.HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09; 是一种用于传输超媒体文档&#xff08;例如HTML文件&#xff0c;可以包含文本&#xff0c;视频&#xff0c;图片&#xff0c;音乐&#xff0c;地图定位&#xff09;的应用层协议&#x…

【windows10】查看计算机的WIFI密码

【windows10】查看计算机的WIFI密码 1、背景2、操作 1、背景 无线路由器设置完密码后&#xff0c;经常会忘记。 当有新的设备需要接入网络的时候&#xff0c;如何能快速获得wifi密码呢&#xff1f; 本博客分享一种通过已联网的计算机来查看wifi密码。 2、操作 -step-2.1、打…

阿里云服务器的备案流程和规定如何?如何办理备案手续?

阿里云服务器的备案流程和规定如何&#xff1f;如何办理备案手续&#xff1f;   一、备案流程概述   阿里云服务器的备案流程分为五个主要步骤&#xff1a;1&#xff09;实名认证&#xff1b;2&#xff09;填写备案信息&#xff1b;3&#xff09;上传资料&#xff1b;4&…

Web服务器群集:链路聚合与桥接

目录 一、理论 1.链路聚合 2.bond模式 3.team模式 4.bond和team区别 二、实验 1.实现bond网络接口 2.实现team网络接口 三、总结 一、理论 1.链路聚合 &#xff08;1&#xff09;概念 链路聚合&#xff08;Link Aggregation&#xff09;&#xff0c;它是一个计算机…

【Vue】Vite基础学习

文章目录 Vite 基础学习一、单页面应用程序二、Vite 基本使用2.1 创建 vite 项目2.2 项目结构2.3 项目运行流程 Vite 基础学习 一、单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简称 SPA&#xff0c;顾名思义&#xff0c…

springboot:定时任务

目录 一、实现定时任务的方法一&#xff1a;基于JDK 方法一&#xff1a;使用JDK自带的Timer类 法二&#xff1a;使用ScheduleExecutorsService类 二、基于Spring Task实现定时任务(推荐使用) 三、基于Quartz实现定时调度 四、使用分布式定时任务框架&#xff1a;elastic-j…

基础-进阶-升级~图解SpringSecurity的RememberMe流程|源码

前言 今天我们来聊一下登陆页面中“记住我”这个看似简单实则复杂的小功能。 如图就是博客园登陆时的“记住我”选项&#xff0c;在实际开发登陆接口以前&#xff0c;我一直认为这个“记住我”就是把我的用户名和密码保存到浏览器的 cookie 中&#xff0c;当下次登陆时浏览器…