最近参加了极客时间的云原生培训,准备写点东西记录下学习心得,并且对一些需要深挖的点做个记号
想想自己也做了将近4年的DevOps,猛然被这么一问不禁有点懵,忙了半天,什么是云原生呢
查了一些资料,似乎并没有云原生的确切定义,比较合意的解释来自英文Cloud Native is Patterns
换成中文的话,差不多就是云原生是一套技术体系和方法论,它生在云上,长在云上。它涵盖了很多,并且随着时间推进,它的定义也在不断完善更新。云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径
高内聚,低耦合当自己动手开始写一个operator的时候,还是可以学到很多东西,也会发现自己的golang基础并不牢固,很多时候写代码还是要靠查文档。收获也很大,可以巩固go语言,也对k8s的operator模式有了深入的了解。
摘了一段别人的总结,非常简短但是到位
The k8s api raise events when a resource is created, edited and deleted. By Watching Resources we can re-trigger the reconcile to ensure a desired stated on the cluster.
You can define them in the function SetupWithManager that you can find in the controller.go. In the following example, we will be setting up controller Watches in a simplified way which has the controller Builder:
func (r *KindReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&cachev1alpha1.MyKind{}). // primary ( API defined in the Operator ) to be watched.
Owns(&appsv1.Deployment{}). // secunary resources to be watched.
Complete(r)
}
When developing operators, it is essential for the controller’s reconciliation loop to be idempotent. By following the Operator pattern you will create Controllers which provide a reconcile function responsible for synchronizing resources until the desired state is reached on the cluster. Breaking this recommendation goes against the design principles of controller-runtime and may lead to unforeseen consequences such as resources becoming stuck and requiring manual intervention.
Reconcile()
The reconcile function is responsible for synchronizing the resources and their specifications according to the business logic implemented on them. In this way, it works like a loop, and it does not stop until all conditionals match its implementation. The following is pseudo-code with an example that clarifies it.
reconcile App {
// Check if a Deployment for the app exists, if not create one
// If has an error, then go to the beginning of the reconcile
if err != nil {
return reconcile.Result{}, err
}
// Check if a Service for the app exists, if not create one
// If has an error, then go to the beginning of the reconcile
if err != nil {
return reconcile.Result{}, err
}
// Looking for Database CR/CRD
// Check the Database Deployments Replicas size
// If deployment.replicas size != cr.size, then update it
// Then, go to the beginning of the reconcile
if err != nil {
return reconcile.Result{Requeue: true}, nil
}
...
// If it is at the end of the loop, then:
// All was done successfully and the reconcile can stop
return reconcile.Result{}, nil
}
The following are a few possible return options to restart the Reconcile:
With the error: return ctrl.Result{}, err
Without an error: return ctrl.Result{Requeue: true}, nil
Therefore, to stop the Reconcile, use: return ctrl.Result{}, nil
Reconcile again after X time: return ctrl.Result{RequeueAfter: nextRun.Sub(r.Now())}, nil
在做DevOps之前,我大概做了六七年的软件测试工程师。
大概四年前,正好赶上公司转型,从一个拥有大型本地数据中心的重型公司转变成一个“云上”公司,公司的大部分业务,在拆分的时候都搬上了公有云。我在那时,加入了DevOps,何其有幸,目睹了公司的蜕变
我们先做的是将服务拆分成微服务,然后将各个微服务容器化,期间也在CICD上一步步探索提升,从自动发布到云上的虚拟机,到后来自动发布到公有云的k8s集群,从手动触发发布,到全自动PR触发
到现在,我们专注于监控,自动告警,OC,SLA/SLO,以及在此过程中敏捷的注入。回看起来,似乎有高人在背后指点,我们所做的每一步都契合着云原生
随着队伍的壮大,我们的版图也越来越大,此时你又发现,自己所做的一切又是云原生的冰山一角。
所以,云原生,任重道远,道阻且长。
DevOps全技术栈镇楼

https://zhuanlan.zhihu.com/p/150190166
https://www.oracle.com/cloud/cloud-native/what-is-cloud-native/
https://builtin.com/cloud-computing/what-is-cloud-native
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一
【动态规划】一、背包问题1.背包问题总结1)动规四部曲:2)递推公式总结:3)遍历顺序总结:2.01背包1)二维dp数组代码实现2)一维dp数组代码实现3.完全背包代码实现4.多重背包代码实现一、背包问题1.背包问题总结暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(DynamicPlanning)里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。1)动规四部曲:(1)确定dp数组及其下标的含义(2)确定递推公式(3)dp数组的初始化(4)确定遍历顺
我在/usr/local/lib中安装了一些本地库。我现在正在尝试安装一个需要这些的gem,以便正确构建,但是gem构建失败,因为它找不到图书馆。gem的extconf.rb文件试图确认它可以找到库have_library()但由于某种原因失败了。我尝试设置一堆环境变量,但似乎没有任何效果:irb(main):003:0>require'mkmf'=>trueirb(main):004:0>have_library('gecodesearch')checkingformain()in-lgecodesearch...no=>falseirb(main):005:0>ENV['LD_LI
文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制
1,Camera基本工作原理答案:光线通过镜头Lens进入摄像头内部,然后经过IRFilter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两种,可以将光学信号转换为电信号,再通过内部的ADC电路转换为数字信号,然后传输给DSP(如果有的话,如果没有则以DVP的方式传送数据到基带芯片baseband,此时的数据格式RawData,后面有讲进行加工)加工处理,转换成RGB、YUV等格式输出。数据流是如何从sensor到APP的?上述描述结束后,在ISP处理后面的阶段,数据会进行分流,分为capture,preview,video等以供后续动作使用。例如
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术实验内容:C#面向对象技术一、实验目的及要求二、实验环境三、实验内容与步骤3.1、实验内容:测试类,实现多态3.2、实验步骤3.2.1、实验程序3.2.2、实验运行结果3.3、实验内容:创建一个Vehicle类,并将它声明为抽象类3.4、实验步骤3.4.1、实验程序3.4.2、实验运行结果四、实验总结实验内容:C#面向对象技术一、实验目的及要求(1)掌握类的继承特性;(2)学会使用C#实现类的继承性;(3)理解类的多态特性;(4)学会使用C#的方法重写;二、实验环境MicrosoftVisualStudio2008三、实验内容与步骤3.
我正在试验iPhoneSDK并在Nic博士的rbiPhoneTest项目中做一些TDD。我想知道有多少人(如果有的话)成功地使用了这个或任何其他iPhone/Cocoa测试框架?更重要的是,我想知道如何最好地断言专有的二进制请求/响应协议(protocol)。这个想法是通过网络发送二进制请求并接收二进制响应。请求和响应是使用byteand'ing和or'ing创建的。我正在使用黄金副本模式来测试我的请求。这是我到目前为止所拥有的。不要笑,因为我是ObjectiveC和Ruby的新手:requireFile.dirname(__FILE__)+'/test_helper'require'