K8s和声明式编程
转载:原文链接
认识k8s之后,他的操作模式对我来说是一种很不错的体验。他提供了更接近现实世界的面向对象接口。
什么是k8s?
Kubernetes(K8s)是一种开源容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它简化了容器化应用的管理,提供自动化、可扩展的部署,并允许高效管理跨多个主机的容器化应用程序。
在Kubernetes中有许多对象。其中,Deployment创建ReplicaSets,ReplicaSets负责创建Pod。ReplicaSets它们是一组具有相同配置的Pod的集合。Pod是Kubernetes的最小部署单元,可容纳一个或多个容器。ReplicaSets确保指定数量的Pods运行,如果失败则重新创建,而Deployment则管理和配置ReplicaSets,确保应用程序可靠地运行。
我要如何操作他?
在使用中,我需要关心Deployment如何创建ReplicaSets吗?我需要关心ReplicaSets如何创建Pod吗?实际上我并不需要,我对此一无所知。我只需要对他们的spec进行定义即可。什么意思呢?我只需要告诉系统(控制面)每个对象应该是什么(或者定义对象的模板),例如需要几个pod,升级策略是什么(注意:不是如何升级,而是升级应该确保什么?例如确保有3个可用的pod)。控制面会监控每个对象的情况,并尽可能的让他们的实际情况接近我定义的情况。至于他们是怎么做的我完全不需要理会。
声明式编程
没错,上面的体验正是我想说的:声明式编程。与过程式编程不同,声明式编程只用告诉机器我需要怎样的东西,而不需要告诉他我要怎么做。例如SQL,我只声明了我要怎样的数据,却不用告诉机器如何查找,不需要告诉他走哪个索引或者全表搜索。
如何在实务中使用声明式编程
我们可以做一个事件处理系统,前端发送来请求,记录到事件里面去。事件处理系统收到事件,则进行处理,再反馈给前端。前端的请求是精准的一个大的需求,而不是多次的分步的请求。事件处理系统更像是一个大的状态机,根据前端发来的各种请求,改变各种状态,以达到需求。
例如,我要实现当用户的密码被修改(包括用户修改和管理员修改),然后发送短信通知用户的请求。
首先,前端发送用户修改请求,状态机收到信息,修改密码,更新密码修改时间。此时系统达到了第一个状态。
很快,系统轮询发现,密码修改通知的事件早于密码最新修改的事件,就触发密码修改通知,然后更新密码修改通知的事件为当前时间(晚于密码最新修改时间)。
再次,前端发送管理员修改请求,状态机同样修改密码,更新修改密码时间。随后,系统轮询再次发现密码修改通知的事件早于密码最新修改的事件,就触发密码修改通知,然后更新密码修改通知的事件为当前时间(晚于密码最新修改时间)。
好了,有人可能就会问了。我搞这么复杂,还要轮询维护状态,为什么不直接修改密码请求的时候,一并发送通知呢?我给出的例子实际上是简化的,只有两个修改密码的方式。如果其他情况,我要100个,1000个修改方式呢?甚至我允许直接改数据库修改呢?是不是就没办法及时响应了。
当然,问题也很明显了。需要许多CPU算力和内存来监控数据变化,轮询各种事件。即便什么都没做,监控与轮询依然存在,这将非常消耗资源。
希望在不久的将来,资源不再成为问题。
K8s和声明式编程的更多相关文章
- k8s对象类资源格式
k8s api仅接受及响应json格式的数据,同时,为了便于使用,它也允许用户提供yaml格式的post对象,但apiserver需要事先自行将其转换为json格式后方能提交.每个资源通常仅接受并返回 ...
- K8s控制器
K8s控制器 POD分类 #自主式pod:退出后,不会被创建 #控制器管理的pod:在控制器的生命周期内,始终位置pod的副本数 控制器类型 ReplicationController和Replica ...
- 【Kubernetes】K8S网络方案--最近在看的
K8S网络-最近在看的 Create a Minikube cluster - Kubernetes Kubernetes Documentation - Kubernetes Kubernetes ...
- 【Kubernetes】K8S 网络隔离 方案
参考资料: K8S-网络隔离参考 OpenContrail is an open source network virtualization platform for the cloud. – Kub ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- k8s volume
只有nfs和rbd的,本人翻译确实很渣 在容器中磁盘文件寿命是短暂的,当在容器中运行一些重要程序时,这会产生一些问题. 首先,当一个容器崩溃后,kubelet将重新启动该容器, ...
- k8s pv
这个文档描述当前在k8s中PersistentVolumes的使用. 我们建议和volume一起进行了解 Introduction 管理存储和管理计算是截然不同的问题. 持久存储子系统对用 ...
- k8s DNS 服务发现的一个坑
按照官当文档,以及大家的实践进行k8s dns 服务发现搭建还是比较简单的,但是会有一个因为系统默认dns 配置造成的一个问题 1. linux 默认dns 配置在 /etc/resolv.conf ...
- k8s dns 服务安装配置说明
1. 提前条件 安装k8s 集群 2. dns 安装配置 安装方式: 使用controller service controller 脚本: 基于官方改动 apiVersion: v1 kin ...
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
随机推荐
- ArcGIS地图投影与坐标系转换的方法
本文介绍在ArcMap软件中,对矢量图层或栅格图层进行投影(即将地理坐标系转为投影坐标系)的原理与操作方法. 首先,地理坐标系与投影坐标系最简单的区别就是,地理坐标系用经度.纬度作为空间衡量指 ...
- Linux 下 C语言 open() 和 fopen() 区别
Linux 下 C语言 open() 和 fopen() 区别 fopen() #include <stdio.h> FILE *fopen(const char *path, con ...
- CCF PTA编程培训师资认证
考试费用: 双会员500元,任意一方单会员750元,报名考试同时成为CCF专业会员850元,非会员1000元. P/T2补考费用:双会员200元,任意一方单会员300元,非会员400元. T1补考费用 ...
- DDMS查看Threads情况
有时候程序运行出现死锁或者信号量卡死是很纠结的问题,单看代码很难分析定位问题,这时候可以借助DDMS来查看threads的运行情况,一目了然. 手机连接上USB,确保adb连通,然后启动Eclipse ...
- 基于Effect的组件设计
Effect的概念起源 从输入输出的角度理解Effect https://link.excalidraw.com/p/readonly/KXAy7d2DlnkM8X1yps6L 编程中的Effect起 ...
- json数组格式问题
---恢复内容开始--- 使用jsonserver来模拟后台数据接口时犯了一个很低级的错误 找了很久没有发现有什么不对劲的地方,后来仔细发现原来是一个很细微的语法问题:}] 中间不能有逗号!! -- ...
- LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项
一.前言 大家在开发过程中必不可少的和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转化! 每次写完就忘记了,小编专门来整理一篇来详细说一下他们四个的转换的方法,方便后面使用!! 二.Loc ...
- 业务出海、高效传输、动态加速,尽在云栖大会「CDN与边缘计算」专场
2023杭州·云栖大会,即将热力来袭. 一场云计算盛会,500+前沿话题,3000+科技展品,与阿里云一起,共赴72小时的Tech沉浸之旅. 今日,「CDN与边缘计算」Tech专场,重磅议题抢先知晓! ...
- splay + 垃圾回收 知识点与例题的简要讲解
splay 简要讲解 前置芝士:普通二叉树 splay tree是一个越处理越灵活的数据结构,通过splay(伸展)操作,使整棵树的单次查询时间复杂度接近于O(log n),整棵树的高度也接近于log ...
- Python 继承和子类示例:从 Person 到 Student 的演示
继承允许我们定义一个类,该类继承另一个类的所有方法和属性.父类是被继承的类,也叫做基类.子类是从另一个类继承的类,也叫做派生类. 创建一个父类 任何类都可以成为父类,因此语法与创建任何其他类相同: 示 ...