摘要:健康检查日志没有严格按照periodSeconds间隔时间来打印。 核心代码如下: pkg/kubelet/prober/worker.go pkg/kubelet/prober/prober.gorunProbe方法(kubelet健康检查有3种方式) httpGet发送HTTP 请求,返回码介于
阅读全文
摘要:Linux Socket由内核实现,全双工方式,单个客户端进程通过多条连接连上服务端后,并发发送请求并接收响应,最后关闭连接。TCP是协议无实体,Socket是具体实现。 服务端初始化Socket->绑定地址和端口->监听端口->accept阻塞等待客户端连接->处理请求并响应客户端初始化Socke
阅读全文
摘要:kubeconfig默认在~/.kube/config,主要包括certificate-authority-data根证书、client-certificate-data客户端证书、client-key-data客户端私钥、context上下文、server即kube-apiserver IP和端口
阅读全文
摘要:挂载命令 把宿主机/home目录挂载到容器的/test目录当中。docker run -v /home:/test ... 挂载操作不破坏隔离性 在rootfs准备好(联合挂载)之后,在执行chroot之前,把Volume指定的宿主机目录挂载到指定的容器目录。执行这个挂载操作时,容器init进程已经
阅读全文
摘要:安装mingw64 C/C++编译器GCC的Windows版本https://sourceforge.net/projects/mingw/从官网下载后勾选勾选全部后关闭窗口时选择review changes 设置环境变量 通过命令gcc -v检验是否设置成功。 打开代码后,打开某个c文件,选择Cr
阅读全文
摘要:下载ZK代码 git clone https://github.com/apache/zookeeper.git cd zookeeper git checkout branch-3.8 设置环境变量 echo "export ZOOKEEPER_HOME=/root/code/java/zooke
阅读全文
摘要:zk优点 支持数据持久化 zk数据保存方式zk使用ConcurrentHashMap来保存键值对。定时持久化1. 把每次事务操作记录到日志文件,通过日志文件来恢复数据。2. 提供对树结构和session信息进行数据快照持久化的操作,有利于加快数据恢复。 删除目录的保护措施 zk删除目录时,如果目录下
阅读全文
摘要:key和value key是字符串value有多种类型,包括string、set(元素是字符串,去重)、sortset(元素是字符串,有序且去重)、list(元素是字符串)、hash(field和value组成键值对, field和value是字符串)
阅读全文
摘要:通过SET原子操作来设置key和过期时间 // 加锁// 如果key不存在,那么设置它的值,否则什么也不做SETNX lock 1// 10s后自动过期EXPIRE lock 10 // 2者合一,一条命令保证原子性执行SET lock 1 EX 10 NX 问题1:无法评估准确的加锁时间(自动续期
阅读全文
摘要:MySQL主备同步原理1 备库io_thread通过长连接获取主库的binlog2 备库sql_thread执行binlog 节点A和B之间互为主备关系,都认为对方是主,切换时不用再修改主备关系。解决双M binlog循环同步问题1 A更新的事务,binlog记的是A的server id2 B同步后
阅读全文
摘要:全局锁 对数据库加锁,典型使用场景是全库备份。加全局读锁,整库只读:Flush tables with read lock (FTWRL)。 针对全库只读,不使用set global readonly=true,使用FTWRL的原因:1. readonly的值可能用来做逻辑判断,例如判断是主库还是备
阅读全文
摘要:InnoDB引擎1 自增值的保存机制MySQL 5.7及之前的版本自增值保存在了内存里面,MySQL 8.0版本才有自增值持久化能力(把自增值的变更记录在了redo log,重启后依靠redo log回复)。每次重启后,把自增值的最大值max(id)+1作为这个表当前的自增值。例如,一个表最大的id
阅读全文
摘要:主键索引和普通索引结构上的区别 每一个索引在InnoDB里面对应一棵B+树。有一个主键列为ID的表,表中有字段k,在k上有索引。CREATE TABLE T ( id int PRIMARY KEY, k int NOT NULL, name varchar(16), INDEX(k)) ENGIN
阅读全文
摘要:join LEFT JOIN连接左表中的所有行,即使在右表中找不到匹配的行也显示出来,用NULL值代替。RIGHT JOIN和LEFT JOIN在功能上是等效的,只要表顺序被切换。INNER JOIN中ON条件等同于WHERE子句中的条件。 group by group by在where后面,gro
阅读全文
摘要:CPU 内存 I/O 参考资料 Linux 性能优化实战
阅读全文
摘要:容器 export只针对当前会话有效 source /etc/profile只针对当前会话有效 export写入~/.bashrc后新会话生效 export时key不能带-,否则export会失效 虚拟机 export只针对当前会话有效,但是source /etc/profile新会话依然有效。
阅读全文
摘要:容器拉起流程 为了避免容器频繁拉起,kubelet通过backoff来限制(backoff表示上次容器退出时间与再次创建间隔时间,lastUpdate表示上次容器创建时间,backoff和lastUpdate只会在Next函数中会更新):Pod中重启容器时(周期性执行SyncPod函数),Pod通过
阅读全文
摘要:方法1:goland+dlv远程调试kubelet Goland配置 cd到main函数所在的go文件目录 执行下面命令等待2分钟左右,等待时间长是因为资源不足,直到出现API server listening at: [::]:8033 /root/Downloads/dlv debug --he
阅读全文
摘要:httpGet 发送一个 HTTP 请求,当返回码介于 200~400 之间时,检查成功。 livenessProbe: httpGet: path: /index.html port: 80 httpHeaders: - name: X-Custom-Header value: Awesome i
阅读全文
摘要:使用service的原因 1. Pod的IP不是固定的。2. Pod实例之间需要负载均衡。 部署Service和Deploy 使用selector字段来声明这个Service只代理携带了app=hostnames标签的Pod。这个Service的80端口,代理的是Pod的9376端口。 apiVer
阅读全文
摘要:iptables的缺点和ipvs的优点 当宿主机上有大量Pod时,大量iptables规则不断被刷新,占用大量CPU。ipvs采用了hash数据结构,比iptables更加高效。当创建了Service后,kube-proxy在每个宿主机上创建一个虚拟网卡(名字是kube-ipvs0),每个网卡上配置
阅读全文
摘要:flannel Pod挂载了ConfigMap kube-flannel-cfg
阅读全文
摘要:消息队列本质是将同步处理转成异步处理 消息队列的基本要求不丢消息高可用高性能 消息队列名称 RabbitMQ RocketMQ Kafka 优点 轻量级 低延迟和高稳定性 1. 与周边生态系统的兼容性最好 2. 基于异步批量设计的异步收发性能最好 缺点 1. 消息大量堆积时性能大幅下降 2. 使用的
阅读全文
摘要:有状态应用 实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,就被称为“有状态应用”。 Pod管理策略 通过.spec.podManagementPolicy 字段来管理 Pod。OrderedReady:严格遵循 Pod 顺序来启停,默认设置。Parallel:告诉 StatefulSet
阅读全文
摘要:Deployment控制ReplicaSet(版本),ReplicaSet控制Pod(副本数)。 更新策略 Recreate 删除所有已存在的pod,重新创建新的; RollingUpdate 滚动升级spec.minReadySeconds: 新建Pod状态保持Ready持续时间的最小值,才被认为
阅读全文
摘要:3点需求 只需要感知数据最新的状态,不担心错过数据的变化过程。需求1: 实时性(即数据变化时,相关组件越快感知越好)需求2: 保证消息的顺序性(即消息要按发生先后顺序送达目的组件。很难想象在Pod创建消息前收到该Pod删除消息时组件应该怎么处理)需求3: 保证消息不丢失或者有可靠的重新获取机制(比如
阅读全文
摘要:在内容更新且发生变化时,resourceVersion(从etcd最新版本号开始)变成etcd最新版本号+1;不同于pod,pod控制器和cr都有generation,从1开始,会加1。 创建Pod内容器 删除Pod资源 status.phase status.phase是Pod的当前状态。 Pha
阅读全文
摘要:作用范围 kube-apiserver请求处理全流程 webhook可以作用于准入。 准入控制 回调时,MutatingAdmissionWebhook可以修改对象,ValidatingAdmissionWebhook可以拒绝请求。 参考资料 深入理解 Kubernetes Admission We
阅读全文
摘要:网络类型 VLAN模型 VXLAN模型 VXLAN和VLAN VID转换 针对不同场景,VID说法不同。针对VXLAN来说是VNI,针对VLAN来说是VLAN ID。VLAN和VXLAN共用br-int网桥时,VXLAN解封装后变成VLAN报文,防止br-int上VXLAN报文解封装成VLAN后的内
阅读全文
摘要:软SDN Overlay控制端点放在服务器内的虚拟交换机上。 硬SDN Overlay控制端点放在实体交换机上。
阅读全文
摘要:设置GOPATH环境变量 go env -w GO111MODULE=auto cd $GOPATH mkdir -p src/k8s.io cd src/k8s.io git clone https://github.com/kubernetes/kubernetes.git cd kuberne
阅读全文
摘要:IoC(控制反转) Java中,一个类想要调用另一个类中的属性或方法,先通过new的方式创建后者的对象,再调用其属性或者方法。调用者掌握着被调用者对象创建的控制权。 控制反转把原本调用者通过直接new的方式来实现对象创建,反转给IoC容器来实现。 在Spring中,IoC容器管理Java对象。Bea
阅读全文
摘要:AOP(面向切面编程) 问题 应用中非业务的通用功能(日志管理、权限管理、事务管理、异常管理等)代码横向散布在多个不同的业务模块中,容易产生大量重复性代码,不利于复用和维护。 解决方案 Spring AOP在运行时为目标对象通过动态代理(JDK或者CGLIB)生成一个动态代理对象,在代理对象中实现对
阅读全文
摘要:参考资料 IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂) 创建项目 创建多个目录 把application.properties改成yml格式并补充配置 mysql中创建数据库和表 create database db1; use db1; creat
阅读全文
摘要:下载Spring源码并切换分支 Spring源码仓https://github.com/spring-projects/spring-framework git checkout 5.0.x 安装和配置gradle 查看依赖的gradle版本:4.4.1gradle/wrapper/gradle-w
阅读全文
摘要:参考资料 从 0 开始手写一个 Mybatis 框架,三步搞定! Mybatis框架源码流程 mybatis的配置文件有2类1 mybatisconfig.xml,配置了全局参数,只有一个。2 Mapper.xml 配置多个statemement即sql,存在多个。 通过mybatisconfig.
阅读全文
摘要:IDEA配置 IDEA安装MyBatisX插件。根据IDEA指引来创建Spring Boot项目mybatisplus-demo1。 添加依赖 添加mybatisplus和lombok依赖 <dependency> <groupId>com.baomidou</groupId> <artifactI
阅读全文
摘要:Mybatis根据数组或者List查询List结果 数组参数 //接口方法 ArrayList<User> selectByIds(Integer [] ids); //xml映射文件 <select id="selectByIds" resultMap="BaseResultMap"> selec
阅读全文
摘要:String str1= "abc"; String str2= new String("abc"); String str3= str2.intern(); System.out.println(str1==str2); System.out.println(str2==str3); System
阅读全文
摘要:HashMap 结构桶数组+单链表+红黑树(JDK1.8引入) 容量是2的幂的原因寻找位置时,(n - 1)& hashCode值等价于hash%n,但是&比%具有更高的效率。得到key的hashCode值后,通过二次hash(第一次hash时右移 16 位,hashCode值高16位与低16位异或
阅读全文
摘要:内存模型 JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。 堆 堆中包含了字符串常量池。 程序计数器 记录线程执行的字节码的地址。 方法区 存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池(存放编译生成的字面量和符号引用)。当类加载到内存后,JVM把类文件常量池中的内容存
阅读全文
摘要:默认垃圾收集器 JDK1.7和JDK1.8默认垃圾收集器都是ParallelScavenge(新生代)+ParallelOld(老年代)JDK1.9默认垃圾收集器G1 查看命令:java -XX:+PrintCommandLineFlags -version G1 JDK 1.7推出的垃圾收集器,特
阅读全文
摘要:跨平台原理 Java的跨平台基于编译器和JVM。编译器把源文件编译成与平台无关的字节码class文件,JVM把该文件解释成与平台有关的机器码指令,在平台上执行。 Java面向对象的4个特征 1 抽象提取对象的共性,构成抽象类或接口,由继承抽象类的类或接口的实现类来重写抽象方法。2 继承子类继承父类(
阅读全文
摘要:invalid operation: n * time.Second (mismatched types int and time.Duration) package main import "time" func main() { n := 1 time.Sleep(n * time.Second
阅读全文
摘要:panic可能原因 1. 空指针2. 直接调用panic函数3. 数组越界4. map读写并发(recover不能恢复) core dump程序出现段错误时出现的错误文件,通过该文件确认错误的位置。程序因段错误异常终止时打印堆栈信息// 开启core dump功能,不限制core文件大小ulimit
阅读全文
摘要:字符串拼接和strings.Buffer缺点 Go里面的字符串是常量,对字符串的修改会重新申请内存地址。虽然bytes.Buffer避免了字符串修改过程中的内存申请,但是最后从[]byte转成字符串时会重新内存申请。从Go 1.10开始,提供了性能更好的方法strings.Builder,与byte
阅读全文
摘要:一句话概括 基于内存的KV缓存,支持删除和过期以及持久化到文件并恢复。 使用示例 go.mod增加依赖require github.com/patrickmn/go-cache v2.1.0+incompatible package main import ( "log" "time" "githu
阅读全文
摘要:结构体定义 runtime/slice.go文件中 type slice struct { array unsafe.Pointer // 数组的指针 len int cap int } 扩容 通过append方法添加数据,返回一个新的slice对象,地址和之前不一样。但是原来元素地址是不变的,直到
阅读全文
摘要:map内存模型 // A header for a Go map. type hmap struct { // 元素个数,调用 len(map) 时,直接返回此值 count int flags uint8 // buckets 的对数 log_2 B uint8 // overflow 的 buc
阅读全文
摘要:使用场景 在协程之间传递上下文 context接口 type Context interface { // 返回绑定当前context的任务取消的截止时间 // 如果没有设定期限,将返回ok == false Deadline() (deadline time.Time, ok bool) // 绑
阅读全文
摘要:代码出处 Go SDK container/heap/heap.go Interface 接口定义 type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interf
阅读全文
摘要:引用类型引用类型有字典类型、通道类型、函数类型、切片类型、接口类型和指针类型。 值类型值类型有基础数据类型和结构体类型以及数组类型。
阅读全文
摘要:执行单个目录所有测试用例并生成覆盖率 go test -gcflags=all=-l -coverprofile=$GOPATH/bin/c.out . go tool cover -html=$GOPATH/bin/c.out -o=$GOPATH/bin/tag.html 下面场景相同go to
阅读全文
摘要:判断某个对象是否实现了某个接口 package main import "fmt" type Do interface { do() } type A struct{} func (a A) do() {} type B struct{} func main() { var do interface
阅读全文
摘要:环境变量 GOROOT:GO语言的安装路径GOPATH:项目目录GOBIN:执行go install go文件时,生成可执行文件的路径,通常设置为GOPATH/bin。 GOPATH目录结构 GOPATH/src目录下放源代码文件。GOPATH/pkg目录下放执行go install 目录名后生成的
阅读全文
摘要:goroutine 协程本意是coroutine,go协程是goroutine。线程分为内核态线程(内核线程)和用户态线程(协程)。线程由CPU调度是抢占式的,协程由用户态调度是协作式的(主动让出才执行下一个)。 N:1(N个用户线程绑定1个内核线程) 例子:python的gevent优点:协程切换
阅读全文
摘要:三色标记法 三色标记法配合写屏障和辅助GC。1.初始状态所有对象都是白色。2.从根出发扫描,将引用的对象标记为灰色。3.分析灰色对象是否引用了其他对象,自身标记为黑色,将它引用的其他对象标为灰色4.重复步骤3,直到灰色对象队列为空。此时白色对象即为垃圾,进行回收。 写屏障:每一轮GC开始时会初始化屏
阅读全文
摘要:安装beego和bee go get github.com/astaxie/beego go get github.com/beego/bee 自己的用户变量 -> Path -> 添加GOPATH路径\bin(bee.exe文件位置)确认bee命令全局可用:bee version 新建API项目并
阅读全文
摘要:docker exec -u root -it etcd容器id sh export ETCDCTL_API=3 alias myetcd="etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etc
阅读全文
摘要:ovs只支持出方向trace,不支持入方向trace。 方法1 ovs-appctl ofproto/trace br-int in_port=0af80797dfb2_h,icmp,nw_src=10.244.0.14,nw_dst=10.244.0.5 方法2 保存抓包结果 tcpdump -i
阅读全文
摘要:安装ovs yum install -y epel-release libibverbs centos-release-openstack-train openvswitch # 启动ovsdb-server和ovs-vswitchd以及ovn-northd systemctl start open
阅读全文
摘要:编译kubelet yum install -y gcc go env -w GO111MODULE="off" cd $GOPATH/src/k8s.io/kubernetes/cmd/kubelet go install -v # 或者make,编译后的文件在kubernetes/_output
阅读全文
摘要:k8s 1.15.0 sessionAffinity原理 service会话保持配置 ... sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800 ... sessionAffinity默认是
阅读全文