golang Context上下文
https://zhuanlan.zhihu.com/p/68792989
k8s-有状态服务无状态服务和对外访问服务
基本概念无状态服务无状态服务不会在本地存储持久化数据.多个服务实例对于同一个用户请求的响应结果是完全一致的.这种多服务实例之间是没有依赖关系,比如web应用,在k8s控制器 中动态启停无状态服务的pod并不会对其它的pod产生影响.
有状态服务有状态服务需要在本地存储持久化数据,典型的是分布式数据库的应用,分布式节点实例之间有依赖的拓扑关系.比如,主从关系. 如果K8S停止分布式集群中任 一实例pod,就可能会导致数据丢失或者集群的crash.
Deployment部署的问题?
Deployment被设计用来管理无状态服务的pod,每个pod完全一致.什么意思呢?
无状态服务内的多个Pod创建的顺序是没有顺序的.无状态服务内的多个Pod的名称是随机的.pod被重新启动调度后,它的名称与IP都会发生变化.无状态服务内的多个Pod背后是共享存储的.2.1.新的问题
对于数据库有状态的服务容器编排,Deployment解决方案就变得无能为力了.比如,Redis是主从的架构,只能允许集群中出现一个主节点提供写,其它节点提供读能力.如果同时出现二个主节点后,必须会出现并发写的 操作,进一 ...
k8s-StorageClass PV PVC 概念和使用
负责把PVC绑定到PV的是一个持久化存储卷控制循环,这个控制器也是kube-manager-controller的一部分运行在master上。而真正把目录挂载到容器上的操作是在POD所在主机上发生的,所以通过kubelet来完成。而且创建PV以及PVC的绑定是在POD被调度到某一节点之后进行的,完成这些操作,POD就可以运行了。下面梳理一下挂载一个PV的过程:
用户提交一个包含PVC的POD
调度器把根据各种调度算法把该POD分配到某个节点,比如node01
Node01上的kubelet等待Volume Manager准备存储设备
PV控制器调用存储插件创建PV并与PVC进行绑定
Attach/Detach Controller或Volume Manager通过存储插件实现设备的attach。(这一步是针对块设备存储)
Volume Manager等待存储设备变为可用后,挂载该设备到/var/lib/kubelet/pods/<Pod 的 ID>/volumes/kubernetes.io~& ...
GOLANG-笔记7-error.group用法
1 .先看下数据结构12345678910type Group struct { cancel func() wg sync.WaitGroup sem chan token errOnce sync.Once err error}
2.在并发编程里 sync.WaitGroup并发原语的使用频率非常高,它经常用于协同等待的场景 gorouting 都完成后才能继续执行。
如果在woker goroutine的执行过程中遇到错误并想要处理该怎么办?
WaitGroup并没有提供传播错误的功能,遇到这种场景我们该怎么办?Go语言在扩展库提供了ErrorGroup并发原语正好适合在这种场景下使用,它在WaitGroup的基础上还提供了,错误传播以及上下文取消的功能。
扩展库通过errorgroup.Group提供ErrorGroup原语的功能,它有三个方法可调用
123func WithContext(ctx context.Context) (*Group, context.Context)func (g *Group) Go(f func() error) ...
k8s-kubeadmin安装
通过kubeadm工具,部署k8s集群。操作步骤如下:
准备工作:
配置yum源,repo(防被墙)
安装常用工具,同步时间
关闭防火墙,将SELinux配置为Permissive模式,关闭swap
加载ipvs模块,优化内核
在所有机器上安装docker
在所有机器上安装kubeadm, kubelet, kubectl
部署集群Master节点
部署集群工作节点
安装CNI网络插件
一个Kubernetes集群Master节点。k8s官网现在将master节点称为control plane node(控制平面节点)
一个Kubernetes集群Slave节点。k8s官网叫worker node(工作节点)。下文中Slave节点和工作节点含义含义相同。
hostname
ip
备注
master
master.k8s
192.168.246.133
k8s主节点(control plane node)
slave
slave.k8s
192.168.246.132
k8s 工作节点(worker node)
0. 系统要求安装之前,请确 ...
k8s-IPVS概念原理以及应用
IPVS的概念、原理及应用一、什么是IPVSLVS(Linux 虚拟服务器)和 IPVS(IP 虚拟服务器)是 Linux 中用于构建可扩展和高性能网络服务的两种相关技术。
LVS 是 Linux 系统的内核级负载均衡解决方案。 它允许您在多个服务器之间分配传入的网络流量,创建一个服务器集群,在客户端看来就像一个虚拟服务器。 LVS 中的负载均衡算法可以根据各种因素(例如循环法、最少连接数和源 IP 哈希)来分配流量。
二、IPVS的工作原理IPVS的工作原理基于网络地址转换(Network Address Translation,NAT)和端口转换(Port Translation)。
当一个网络请求到达IPVS,IPVS会根据预设的调度算法选择一个后端服务器,然后修改网络请求的目标IP地址和端口,使其指向选择的后端服务器。
当后端服务器处理完请求后,IPVS会将服务器的响应转发回原始请求的客户端。
在这个过程中,客户端并不知道实际上是哪个后端服务器处理了它的请求。
三、IPVS的主要特性丰富的调度算法:IPVS支持多种调度算法,包括最小连接(Least-Connection)、轮 ...
PHP-析构函数-destruct
phpStrom 里alt+insert 会出现的一些函数
析构函数destruct
简单理解:构造函数的对立面构造函数:__construct()在初始化对象的时候默认执行的析构函数:__destruct()在对象销毁回收时候默认执行的,类似于web框架里面的钩子函数
触发条件 当对象或者变量 消失时候
关键词:unset或者对象生命周期结束
phpStrom 里alt+insert 会出现的一些函数
1234567891011121314151617181920212223242526calss A{ protected $data = [];public function insert($data) { $data['appkey'] = getAppkey(); $data['channel'] = getChannel(); $this->data[] = $data; //这个[]意思在多个多次调用的时候插入整个数组很关键,可以看下面内容 ...
GOLANG-笔记-ArrayMapSlice
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253### 1. := = ==:= 给某变量的第一次赋值,初始化= 变量的非第一次赋值== 等于操作符### 2. go中nil的使用指针、切片、映射、通道、函数和接口的零值则是 nil。- nil 标识符是不能比较的- nil 不是关键字或保留字- nil 没有默认类型- 不同类型 nil 的指针是一样的- 不同类型的 nil 是不能比较的- 两个相同类型的 nil 值也可能无法比较- nil 是 map、slice、pointer、channel、func、interface 的零值- 不同类型的 nil 值占用的内存大小可能是不一样的### 3.切片 slice类似于py或Java的list ,是数组的抽象,支持数组扩容 定义:slice1 := make([]type, len)len 获取长度 cap 获取容量 append(slice1 ,v1,...) copy(new_slice, ...