Kubernetes IPVS模式下服务间长连接通讯的优化,解决Connection reset by peer问题
前段时间测试将一套Kubernetes环境的kube-proxy切换成了ipvs模式,参见Kubernetes kube-proxy开启IPVS模式。 这套Kubernetes集群上主要运行http restful和gRPC两类服务,切换后这段时间还算稳定,只是最近某些客户端服务在调用gRPC服务时小概率出现Connection reset by peer的错误。
前段时间测试将一套Kubernetes环境的kube-proxy切换成了ipvs模式,参见Kubernetes kube-proxy开启IPVS模式。 这套Kubernetes集群上主要运行http restful和gRPC两类服务,切换后这段时间还算稳定,只是最近某些客户端服务在调用gRPC服务时小概率出现Connection reset by peer的错误。
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。
Hubot是Github开发并开源的chatbot,将其部署到运维环境中后,可通过编写自定义的脚本,将之前的web端、shell命令等人工进行的运维工作,通过聊天工具交给机器人来代替。 搭建hubot本地开发环境 安装Node.js: 下载Node.js LTS的Binary版本:https://nodejs.org/en/download/current/。将binary压缩包解压缩到安装目录NODE_INSTALL_PATH中。 设置环境变量NODE_HOME指向到解压缩后的目录,并设置PATH环境变量包含NODE_HOME。
Go语言interface的运行时实现的源码位于$GOROOT/src/runtime/runtime2.go中。 在Go的不同版本中,interface的实现可能会有不同,但整体结构变化不大,本文基于Go 1.17。 1.两类接口的运行时实现 可以在runtime/runtime2.go中找到Go的接口类型变量在运行时的表示,如下是iface和eface两个结构体:
1.istio sidecar代理默认只处理集群内部的目标 先做一个测试,首先将default namespace开启sidecar代理的自动注入: kubectl label namespace default istio-injection=enabled 部署sleep示例应用:
ECMAScript Modules(ES Modules)是ECMAScript 6(ES6)规范中引入的一项重要特性,于2015年发布。ES6是ECMAScript标准的第六个版本,也被称为ECMAScript 2015。 ES Modules提供了一种新的模块系统,以改进JavaScript中模块化的方式。它引入了import和export关键字,允许开发者更方便地组织和管理JavaScript代码。
在Kubernetes中,可以使用Ingress资源将集群内部的Service暴露到集群外部,可参见之前整理的《Kubernetes Ingress实战》。 而Istio这个Service Mesh则推荐使用另一个更好的配置模型,即Istio Gateway。Istio Gateway可以允许我们将Istio的功能(如:监控和路由规则)应用到进入集群的流量。
Kubernetes 1.8关于资源使用情况的metrics(例如容器的CPU和内存),可以通过Metrics API获取到。 前面在做Kubernetes 1.11的升级工作时,Kubernetes 1.11已经废弃heapster那套监控的东东。因此是时候了解一下Kubernetes的Metrics API和Metrics Server了。
Kubernetes Ingress实战(一):在Kubernetes集群中部署NGINX Ingress Controller Kubernetes Ingress实战(二):使用Ingress将第一个HTTP服务暴露到集群外部 Kubernetes Ingress实战(三):使用Ingress将gRPC服务暴露到Kubernetes集群外部 Kubernetes Ingress实战(四):Bare metal环境下Kubernetes Ingress边缘节点的高可用 Kubernetes Ingress实战(五):Bare metal环境下Kubernetes Ingress边缘节点的高可用(基于IPVS) Kubernetes Ingress实战(六):Bare metal环境下Kubernetes Ingress边缘节点的高可用,Ingress Controller使用hostNetwork 前面我们基于Keepavlied实现了Kubernetes集群边缘节点的高可用,详见《Kubernetes Ingress实战(四):Bare metal环境下Kubernetes Ingress边缘节点的高可用》。当kube-proxy开启了ipvs模式后,可以不再使用keepalived,ingress controller的采用externalIp的Service,externalIp指定的就是VIP,由kube-proxy ipvs接管。试验环境如下:
IPVS(IP Virtual Server)是lvs项目的一部分,作为Linux内核的一部分,提供4层负载均衡器的功能,即传输层负载均衡。ipvs运行在主机内核中,作为真是服务器集群前的负载均衡器,将到对服务的请求转发到真实的服务器上,并将多个ip的真实服务器集群的服务显示为单个ip的虚拟机服务。