Kubernetes集群包管理解决方案及应用商店 Helm&kubeapps
一、引入helm原因当今的软件开发,随着云原生技术的普及,我们的工程应用进行微服务化和容器化的现象也变得越来越普遍。而Kubernetes几乎已经成了云原生服务编排绕不开的标准和技术。
假设我们需要在K8s中简单部署一个nginx,必要步骤如下:
1、创建或者编写deployment模板
1# kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
2、启动nginx的pod
1# kubectl apply -f deployment.yaml
3、检查pod服务
1# kubectl get pod
4、创建service
1# kubectl expose deployment  nginx --port=8099 --target-port=80 --type=NodePort --dry-run=client -o yaml > service.yaml
5、启动service服务
1# kubectl apply -f servi ...
设计模式之设计原则
1. 什么是设计模式每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,就能一次又一次地使用该方案而不必做重复劳动。
1.1 设计思维两个思维:底层思维和抽象思维
底层思维
向下,如何把握机器底层从微观理解对象构造
语言构造
编译转换
内存模型
运行时机制
抽象思维
向上,如何将我们的周围世界抽象为程序代码
面向对象
组件封装
设计模式
架构模式
2. 面向对象设计2.1 实现层面
向下:深入理解三大面向对象机制
封装:隐藏内部实现
继承:复用现有代码
多态:改写对象行为
向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”。
2.2 面向对象的设计
理解隔离变化
从宏观层面,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。
各司其职
从微观层面,面向对象的方式更强调各个类的“责任”由于需求变化导致的新增类型不应该影响原来类型的实现–是所谓各负其责。
对象是什么?
从语言层面来看,对象封装了代码和数据
从规格层面讲,对象是一系列可被使用的公 ...
基于漏桶算法进行限流
1 速率限制OpenResty 官方的 lua-resty-limit-traffic 的模块,里面有三种限速的策略。
1.1 resty.limit.req 模块基于 漏桶 算法实现的请求速率限制。
1.2 resty.limit.count 模块基于 固定窗口 实现请求的速率限制,如 单位时间内确保累计的请求数量不超过一个极限值。
1.3 resty.limit.conn 模块提供请求并发级别限制并根据额外延迟进行调整。
2 跨机器速率限制lua-resty-redis-ratelimit 通过把状态保存到 Redis,可实现多个Nginx示例状态共享,与 resty.limit.req 模块类似,也是基于漏桶算法对平均请求速率进行限制。
2.1 原理借助于 Redis Lua Script 机制 ,Redis 有一个支持写 Lua 脚本的功能,这个脚本能够让一些操作在 Redis 执行的时候保证原子性,依赖这个机制,把一次状态的变更用 Lua Script 就能够完全原子性地在 Redis 里面做完。同时,该模块支持在整个集群层⾯禁⽌某个非法⽤用户一段时间,可实现全局自动拉⿊功能 ...
虚拟化技术笔记
1 虚拟化技术基础原理
CPU运行特权RANG 0 :执行特权指令(内核)RANG 3:普通指令模式(用户进程)
Guest客户机(1)模拟CPU个数可以大于实际物理机的核数,但性能会有影响(2)VMware中的BT技术
1.1 CPU虚拟化(VT-X)(1)底层宿主机的cpu架构和Guest客户机模拟出来的CPU一样(模拟)(2)底层宿主机的cpu架构和Guest客户机模拟出来的CPU不一样(虚拟化)(VMware中的BT技术)
完全虚拟化:Guest感觉自己是直接运行在物理机上的硬件虚拟化(HVM):CPU拥有五个指令环,RANG -1(host主机运行特权指令) RANG 0-3硬件虚拟化直接使用硬件进行特权指令转换半虚拟化:Guest能意识到自己是运行在虚拟化上,需要修改Guest内核,内核调用主机上的hyper call半虚拟化在主机上运行了一个 层
推荐文章:https://www.cnblogs.com/bakari/p/7966671.html
1.2 内存虚拟化1、Guest访问物理内存需要进行两次转换(引入影子页表)
引入硬件虚拟化(MMU虚拟化)
2、MMU ...
DPDK之多队列网卡测试
0 背景基于环境 VMware+Ubuntu 虚拟机环境,在DPDK接管多队列网卡后,每个网卡数据接收情况。
配置多队列网卡
多队列网卡测试
1 添加多个网卡
在vmware环境中对应虚拟机的虚拟机设置中,增加网络适配器(一个或者多个),对应网卡的个数。
启动虚拟机,查看网卡信息
当前生效的只有一个网卡,是桥接模式的第一个网卡:
123456789101112131415161718192021222324252627282930313233343536373839404142ubuntu@ubuntu:~$ service networking restart    #不同的linux环境重启网络命令是不同的==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to restart 'networking.service'.Authenticating as: ubuntu,,, (ubuntu)Password: ====  ...
【转载】浅析基于DPDK框架下OVS与VPP的差异点
1 概述Data Plane Development Kit简称DPDK,是一套将从网卡收上来的数据包直接映射到用户空间的开发套件,基于此许多大公司都搭建了自己的业务应用框架,如虚拟交换机、虚拟路由器等。其中影响比较大的就是OVS和VPP,本文从这两个系统的性能表现及开发难度两个维度进行详细分析,给出作者对这两个业务框架的一点认识,希望能给学习这两个框架的人有所帮助。
1.1 DPDK简介DPDK原本是基于 Intel 处理器架构下,提供库函数和驱动支持用户空间高效数据包处理的开源套件,即DPDK绕过了系统的内核协议栈对报文的处理过程,报文的收发与处理在用户空间实现。因此对于内核而言,DPDK的工作进程就是一个普通的用户态进程。DPDK的编译、连接和加载方式也跟普通程序没有什么差别。DPDK的这种特性区别于以通用性设计为目的的Linux系统,DPDK专注于高性能的处理网络应用中的数据包。现在这个套件也支持ARM及Power 8。
DPDK的典型框架如下图所示:
图 1 DPDK架构简图
从上图可以看出,DPDK将网卡收上来的报文跳过Linux Kernel,直接映射到用户空间并提供了 ...
【转载】Linux RCU 原理剖析
背景说明:
Kernel版本:4.14
ARM64处理器,Contex-A53,双核
使用工具:Source Insight 3.5, Visio
1. 概述RCU, Read-Copy-Update,是Linux内核中的一种同步机制。RCU常被描述为读写锁的替代品,它的特点是读者并不需要直接与写者进行同步,读者与写者也能并发的执行。RCU的目标就是最大程度来减少读者侧的开销,因此也常用于对读者性能要求高的场景。
优点:
读者侧开销很少、不需要获取任何锁,不需要执行原子指令或者内存屏障;
没有死锁问题;
没有优先级反转的问题;
没有内存泄露的危险问题;
很好的实时延迟;
缺点:
写者的同步开销比较大,写者之间需要互斥处理;
使用上比其他同步机制复杂;
来一张图片来描述下大体的操作吧:
多个读者可以并发访问临界资源,同时使用rcu_read_lock/rcu_read_unlock来标定临界区;
写者(updater)在更新临界资源的时候,拷贝一份副本作为基础进行修改,当所有读者离开临界区后,把指向旧临界资源的指针指向更新后的副本,并对旧资源进行回收处理;
图中只 ...
系统性能调优详解
0 参考资料课程资料:https://github.com/russelltao/geektime_distrib_perf
2 系统层网络优化2.3 优化TCP三次握手性能2.3.1 客户端的优化三次握手建立连接的首要目的是同步序列号。只有同步了序列号才有可靠的传输,TCP协议的许多特性都是依赖序列号实现的,比如流量控制、消息丢失后的重发等等,这也是三次握手中的报文被称为SYN的原因,因为SYN的全称就叫做Synchronize Sequence Numbers。客户端发送SYN开启了三次握手,此时在客户端上用netstat命令(后续查看连接状态都使用该命令)可以看到连接的状态是SYN_SENT(顾名思义,就是刚把SYN发送出去)。
1tcp    0   1 172.16.20.227:39198     129.28.56.36:81         SYN_SENT
如果客户端一直等不到服务端回复ACK报文,客户端会重发SYN,重试的次数由tcp_syn_retries参数控制,默认是6次。
1net.ipv4.tcp_syn_retries = 6
每次充实间隔时间倍数增加 ...
VPP 详解
0 参考资料1 VPP 安装和使用1.1 简介VPP:(vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。是Linux基金会下开源项目FD.io的一个子项目,由思科贡献的开源版本,目前是FD.io的最核心的项目。VPP是一个模块化和可扩展的软件框架,用于创建网络数据面应用程序。更重要的是,VPP代码为现代通用处理器平台(x86、ARM、PowerPC等)而生,并把重点放在优化软件和硬件接口上,以便用于实时的网络输入输出操作和报文处理。为了提高性能,vpp数据平面是由转发节点的有向图组成,这些节点在每次调用时处理多个数据包。这种模式支持各种微处理器优化:流水线处理和预取功能降低依赖数据的读取延迟,固有的I-cache阶段行为,向量指令。除了硬件输入和硬件输出节点,整个转发图都是可移植的代码。模块化设计框架允许任何人“插入”新的图形节点,而不需要更改核心/内核代码。VPP一次从网卡的硬件队列Rx ring收到多个数据包,组成一个Packet vector,借助于报文处理图Packet processing graph来 ...
Redis 核心技术详解
0 参考资料
本笔记是极客时间《Redis核心技术与实战》课程
0.1 学习资料推荐书籍:
工具书:《Redis使用手册》:Redis命令参考
原理书:《Redis设计与实现》
实战书:《Redis开发与运维》
可以尝试读一下Redis源码,有一个网站提供了Redis 3.0源码的部分中文注释,你也可以参考一下。
Redis涉及的知识比较多,比如:操作系统、分布式系统等知识点,如下图:
0.2 学习方法分为三大模块:
掌握数据结构和缓存的基本使用方法;
掌握支撑Redis实现高可靠、高性能的技术;
精通Redis底层实现原理。
参考加餐(二)-Kaito:我是如何学习Redis的?_For_group_share
1 基础篇1.1 基础架构:一个键值数据库包含什么?从这张对比图中,我们可以看到,从SimpleKV演进到Redis,有以下几个重要变化:
Redis主要通过网络框架进行访问,而不再是动态库了,这也使得Redis可以作为一个基础性的网络服务进行访问,扩大了Redis的应用范围。
Redis数据模型中的value类型很丰富,因此也带来了更多的操作接口,例如面向列表的 ...
