使用 NFS 作为 K8s 存储插件

1. 基础配置 首先,在所有 master 节点和 worker 节点上安装 nfs-utils. 1sudo yum -y install nfs-utils 2systemctl enable nfs-utils 2. NFS Server 配置 服务端安装 nfs-utils 和 rpcbind 1sudo yum -y install nfs-utils rpcbind 2systemctl enable nfs-utils 3systemctl enable rpcbind 创建共享目录 1mkdir /hc-data/nfs **创建并修改配置文件 配置文件为 /etc/exports ...

八月 24, 2024

Nginx 实现 GPT 流式传输

核心参数 1proxy_buffering off; 该指令使 Nginx 不缓冲来自上游服务器的响应,而是立即将其发送给客户端。适合需要实时或流式传输数据的场景非常有用,比如实时聊天、流媒体等。 ...

五月 29, 2024

Golang 逃逸分析

堆内存与栈内存 Go 在 2 个位置为变量分配内存,全局堆(heap)空间,和每个 goroutine 的栈(stack)空间。 Go 语言实现 GC 机制,因此开发者不需要关心内存分配在栈上,还是堆上。但是从性能的角度出发,在栈上分配内存和在堆上分配内存,性能差异是非常大的。 ...

五月 17, 2024

Golang 空结构体

在 Go 语言中,空结构体 struct{} 是一个非常特殊的类型,它不包含任何字段且不占用任何内存空间。 空结构体不占用内存空间 1type Empty struct{} 2 3func main() { 4 5 var s1 struct{} 6 s2 := Empty{} 7 s3 := struct{}{} 8 9 fmt.Printf("s1 addr: %p, size: %d\n", &s1, unsafe.Sizeof(s1)) 10 fmt.Printf("s2 addr: %p, size: %d\n", &s2, unsafe.Sizeof(s2)) 11 fmt.Printf("s3 addr: %p, size: %d\n", &s3, unsafe.Sizeof(s3)) 12 fmt.Printf("s1 == s2 == s3: %t\n", s1 == s2 && s2 == s3) 13} 得到输出如下 ...

五月 3, 2024

K8s 下线节点流程

将节点设置为不可调度,防止新的Pod调度到该节点上。 1kubectl cordon <节点名> 排空节点上的Pod 1 kubectl drain <节点名> --ignore-daemonsets --delete-emptydir-data –ignore-daemonsets:允许跳过DaemonSet管理的Pod –delete-emptydir-data:允许删除使用emptyDir卷的Pod 可以直接执行kubectl drain操作,省略cordon步骤。 drain会先cordon之后,再尝试优雅地终止该节点上地Pod(排空)。 ...

四月 14, 2024

K8s 启用 ipvs 模式

安装 ipvs 1# 安装 ipvs 相关软件包 2yum install ipvsadm ipset sysstat conntrack libseccomp 3 4# 载入模块 5modprobe -- ip_vs 6modprobe -- ip_vs_rr 7modprobe -- ip_vs_wrr 8modprobe -- ip_vs_sh 9modprobe -- nf_conntrack 10 11# 创建ipvs.conf,设置内核模块的自动载入。 12cat <<EOF > /etc/modules-load.d/ipvs.conf 13ip_vs 14ip_vs_lc 15ip_vs_wlc 16ip_vs_rr 17ip_vs_wrr 18ip_vs_lblc 19ip_vs_lblcr 20ip_vs_dh 21ip_vs_sh 22ip_vs_fo 23ip_vs_nq 24ip_vs_sed 25ip_vs_ftp 26ip_vs_sh 27nf_conntrack 28ip_tables 29ip_set 30xt_set 31ipt_set 32ipt_rpfilter 33ipt_REJECT 34ipip 35EOF 1systemctl enable --now systemd-modules-load.service 修改 kube-proxy configmap 1# 将 mode 改为 'ipvs' 2kubectl edit cm kube-proxy -n kube-system 重启 kube-proxy 1kubectl -n kube-system rollout restart daemonset kube-proxy 查看新 Kube-proxy pod 的日志 会出现 Using ipvs Proxier ...

四月 13, 2024

MQTT 连接参数配置

MQTT 连接过程 MQTT 连接由客户端向服务器端发起。 任何运行了 MQTT 客户端库的程序或设备都是一个 MQTT 客户端,而 MQTT 服务器 负责接收客户端发起的连接,并将客户端发送的消息转发到另外一些符合条件的客户端。 ...

三月 22, 2024

K8s 修改 NodePort 默认范围

K8S 集群中 NodePort 默认范围为 30000-32767。 若要修改此范围,依次修改 Master 节点上的 /etc/kubernetes/manifests/kube-apiserver.yaml 文件。 1# 备份配置文件 2cp kube-apiserver.yaml kube-apiserver.yaml.bak 3vi kube-apiserver.yaml 4..... 5 Host Port: <none> 6 Command: 7 kube-apiserver 8 - --service-cluster-ip-range=10.96.0.0/12 9# 插入 10 - --service-node-port-range=1-65535 然后, kube-apiserver 会自动重启生效。 ...

三月 21, 2024

MQTT 发布-订阅模式

MQTT 发布/订阅模式 发布-订阅模式(Publish-Subscribe Pattern)是一种消息传递模式,将发送消息的客户端(发布者)与接收消息的客户端(订阅者)解耦,使得两者不需要建立直接的联系也不需要知道对方的存在。 ...

三月 21, 2024

MQTT QoS 简介

什么是 QoS 使用 MQTT 协议的设备一般运行在网络受限的环境下,只依靠底层TCP 传输协议并不能完全保证消息的可靠到达。 因此,MQTT 提供了 QoS(Quality of service) 机制,其核心是设计了多种消息交互机制来提供不同的服务质量,来满足用户在各种场景下对消息可靠性的要求。 ...

三月 20, 2024