• 小贴士:Golang的空数组是否为nil?

    在阅读kubernetes代码时,有时会看到一些代码对数组与nil进行了比较。 // bindAPIUpdate gets the cached bindings and PVCs to provision in podBindingCache // and makes the API update for those PVs/PVCs. func (b *volumeBinder) bindAPIUpdate(podName string, bindings []*bindingInfo, cl...


  • nodePort的副作用

    问题现象 问题原因 灵魂拷问 解决办法 问题现象 某天遇到了一个问题:访问某个web服务时,部分请求失败了,返回了Connection Refused。 这个web服务因为某些原因,网络是hostNetwork类型,跟宿主机是同一个网络namespace。登录到Node上去,可以看到监听socket还是在的,但是直接curl请求的时候,返回了Connection Refused。 为什么呢?通常Connection Refused表示监听Socket没打开,没有打开对应端口...


  • 开启kubernetes的抢占模式

    Pod优先级、抢占 创建PriorityClass 设置Pod的PriorityClassName 君子:Non-preempting PriorityClasses 对比 Cluster Autoscaler Pod优先级、抢占 Pod优先级、抢占功能,在kubernetes v1.8引入,在v1.11版本进入beta状态,并在v1.14版本进入GA阶段,已经是一个成熟的特性了。 顾名思义,Pod优先级、抢占功能,通过将应用细分为不同的优先级,将资源优先提供给高优先级的...


  • MetalLB:穷人的LoadBalancer

    MetalLB介绍 地址分配 外部声明 MetalLB部署 Layer 2模式部署 BGP模式部署 openwrt安装quagga openwrt配置BGP协议 kubernetes上配置BGP协议 BGP模式解析 failover 总结 MetalLB介绍 在说说我的homelab里,伊布介绍了家里的homelab,其中包括了kubernet...


  • kubernetes容器中域名解析优化

    多余的DNS查询 kubernetes的容器域名解析 search和ndots kubernetes为什么使用搜索域 kubernetes搜索域 ndots默认值 ndots修改 dns cache 总结 多余的DNS查询 一些需要解析外部DNS域名的应用,当运行在容器中时,如果我们在容器的network namespace中对dns报文(udp port 53)进行抓包,可能会发现在正确解析之前,还经过了若干...


  • Golang中如何正确使用条件变量sync.Cond

    NewCond Broadcast Signal Wait 举个例子 修改1 修改2 一个真实的例子 Golang的sync包中的Cond实现了一种条件变量,可以使用在多个Reader等待共享资源ready的场景(如果只有一读一写,一个锁或者channel就搞定了)。 Cond的汇合点:多个goroutines等待、1个goroutine通知事件发生。 每个Cond都会关联一个Lock(*sync.Mutex or *s...


  • 如何限制kubernetes本地临时存储的容量

    介绍 配置 实现 requests inode 保护 emptyDir 本地临时存储:local ephemeral storage 介绍 作为kubernetes平台的提供方,必须要对某些“流氓”应用做出一些限制,防止它们滥用平台的CPU、内存、磁盘、网络等资源。 例如,kubernetes提供了对CPU,内存的限制,可以防止应用无限制的使用系统的资源;kubernetes提供的PVC,如cephfs、RBD,也支持容量的限制。 但是,早期kubernetes版...


  • 说说我的homelab

    宽带 网件WNDR无线交换 HP Gen8 虚拟化 公网访问 玩客云 DLNA TODO 说说我的homelab。 宽带 宽带是电信200M下行,光纤入户,电信提供的光猫,带无线功能。光猫的无线也会开启,备用。电信的光猫只有2.4G。 网件WNDR无线交换 家里的无线设备比较多,手机若干,MBP,Windows笔记本,Linux笔记本,Switch,天猫魔盒,Sony/Sharp电视。大部分无线设备并没有连接电信光猫的无线信号,而是连接了网件WNDR430...


  • 小贴士:如何在线关闭一个tcp socket连接

    如何在线关闭一个tcp socket连接? 你可能会说,简单,netstat -antp找到连接,kill掉这个进程就行了。 # netstat -antp|grep 6789 tcp 0 0 1.1.1.1:59950 1.1.1.2:6789 ESTABLISHED 45059/ceph-fuse # kill 45059 连接确实关掉了,进程也跟着一起杀死了。达不到“在线”的要求。 有没有办法不杀死进程,但还是可以关闭socket连接呢...


  • kubernetes PVC支持resize扩容

    1、扩容前准备 2、扩容操作 3、在线扩容 4、cephfs可以扩容吗? kubernetes的bug 从v1.11开始,kubernetes默认开启resize feature 和 PersistentVolumeClaimResize admission controller,如果用户创建的存储卷容量不够,可以进行扩容,原有数据不会丢失。目前支持resize的存储卷AWS-EBS, GCE-PD, Azure Disk, Azure File, Glusterfs, Ci...