Moyrne’Blog

一只正在成长的菜鸟.

安装kubernetes

安装 kubernetes https://segmentfault.com/a/1190000044830019 系统配置 关闭 selinux sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config setenforce 0 && getenforce cgroupv2 grubby --update-kernel=ALL --args=systemd.unified_cgroup_hierarchy=1 开启 ipforward vi /etc/sysctl.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 sysctl --system 停止 firewalld systemctl stop firewalld.service systemctl disable firewalld.service 关闭 swap 分区 swapoff -a && sysctl -w vm.swappiness=0 sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab 安装 ipvsadm yum install ipvsadm ipset sysstat conntrack libseccomp -y 加载内核模块 modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack modprobe -- br_netfilter modprobe -- iscsi_tcp 配置 kubernetes....

2025-08-30 · 4 分钟 · 704 字

学习Linux-01启动

学习Linux-01启动 ref: https://jyywiki.cn/OS/2024/lect18.md src: wget -r -np -nH –cut-dirs=2 -R “index.html*” “https://jyywiki.cn/os-demos/virtualization/linux/" 1. 折腾的原因总结 linux 启动过程中报错不是那么准确,例如:执行的二进制(init)缺少了 .so,会报错 exec init failed: no such file. 例如 virtio_blk 之类的驱动,需要自己在 initramfs 中自己加载。 2. 使用的环境 kali 2024.4 kernel 6.11.2-amd64 initrd.img 6.11.2-amd64 (被我替换了静态编译的 busybox) 不能使用 cpio 等命令解压,看起来是多个文件直接拼接起来的一个文件(使用 binwalk 能够看到),直接使用 cpio 会只能解出来里面的第一个文件; 如果需要提取完整的内容,需要使用 unmkinitramfs qemu-system-x86_64 10.0.2 busybox 1.37.0 3. Makefile 和 init 脚本 Makefile (unmkinitramfs 的部分没有写在里面,手动执行的) # Requires statically linked busybox in $PATH INIT := /init IMG := build/disk....

2025-07-13 · 3 分钟 · 613 字

Etcd

Etcd 配置 使用apt安装etcd sudo apt install etcd 生成证书(参考 https://www.jianshu.com/p/ba0964c41b50) 配置config文件 /etc/etcd/etcd.conf # [Member] ETCD_NAME="worker1" ETCD_DATA_DIR="/var/lib/etcd/worker" ETCD_LISTEN_PEER_URLS="http://yourip-1:2380" ETCD_LISTEN_CLIENT_URLS="http://yourip-1:2379,http://127.0.0.1:2379" # [Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://yourip-1:2380" ETCD_ADVERTISE_CLIENT_URLS="http://yourip-1:2379" ETCD_INITIAL_CLUSTER="worker1=http://yourip-1:2380,worker2=http://yourip-2:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01" ETCD_INITIAL_CLUSTER_STATE="new" # [Security] ETCD_CERT_FILE="/etc/etcd/cert/server.crt" ETCD_KEY_FILE="/etc/etcd/cert/server.key" ETCD_TRUSTED_CA_FILE="/etc/etcd/cert/ca.crt" ETCD_CLIENT_CERT_AUTH=true ETCD_PEER_CERT_FILE="/etc/etcd/cert/server.crt" ETCD_PEER_KEY_FILE="/etc/etcd/cert/server.key" ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/cert/ca.crt" ETCD_PEER_CLIENT_CERT_AUTH=true 修改service文件 /lib/systemd/system/etcd.service [Unit] Description=etcd - highly-available key value store Documentation=https://github.com/coreos/etcd Documentation=man:etcd After=network.target Wants=network-online.target [Service] EnvironmentFile=/etc/etcd/etcd.conf Type=notify User=etcd ExecStart=/usr/bin/etcd --name ${ETCD_NAME} \ --data-dir=${ETCD_DATA_DIR} \ --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \ --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS} \ --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \ --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \ --initial-cluster=${ETCD_INITIAL_CLUSTER} \ --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \ --initial-cluster-state=${ETCD_INITIAL_CLUSTER_STATE} \ --cert-file=${ETCD_CERT_FILE} \ --key-file=${ETCD_KEY_FILE} \ --peer-cert-file=${ETCD_PEER_CERT_FILE} \ --peer-key-file=${ETCD_PEER_KEY_FILE} \ --trusted-ca-file=${ETCD_TRUSTED_CA_FILE} \ --client-cert-auth=${ETCD_CLIENT_CERT_AUTH} \ --peer-client-cert-auth=${ETCD_PEER_CLIENT_CERT_AUTH} \ --peer-trusted-ca-file=${ETCD_PEER_TRUSTED_CA_FILE} Restart=on-abnormal LimitNOFILE=65536 [Install] WantedBy=multi-user....

2022-05-21 · 1 分钟 · 101 字

网络排查案例

预习 traceroute 查看路由跳转 Nginx 日志报 connection reset by peer Wireshark 抓包分析 过滤IP:ip.addr eq my_ip, ip.src eq my_ip或者ip.dst eq my_ip 找到RST报文:tcp.flags.reset eq 1 过滤序列号:tcp.ack eq my_num 过滤时间:frame.time >= "dec 01,2015 15:49:48" 过滤表达式前添加 ! 或者 not 表示取反 多个条件可以使用 and 或者 or 形成复合过滤器 定位防火墙问题 客户端和服务端在同一时间开始抓包 使用IP过滤 查看Wireshark的Expert Information,关注可疑的(如Warning)报文并追踪TCP流 对比两侧文件,如何找到另一端对应的TCP流:TCP序列号(裸序列号) 设置去掉 Wireshark -> Preferences -> Protocols -> Relative sequence numbers Wireshark 支持自定义列,在主窗口中显示。进入详情之后,右键需要在主窗口中显示的数据,选择 Apply as column 同样的服务端,在三次握手中(SYN+ACK 报文)的 TTL 是 59,在导致连接中断的 RST 包里却变成了 64!显然,这个 RST 包并不是跟我们握手的那个服务端发出的(防火墙) 长肥管道 带宽很大、RTT 很长的网络,被冠以一个特定的名词,叫做长肥网络,英文是 Long Fat Network TCP 传输的核心公式:速度 = 窗口 / 往返时间 传输速度的上限就是 window/RTT = 64KB/134ms = 478KB/s TCP Window Full 一般说到 TCP Window,如果没有特别指明,就是指接收窗口。 TCP 的下个序列号(Next Sequence Number)等于序列号和段长度之和,即 NextSeq = Seq + Len。 在途数据计算 Bytes_in_flight = latest_nextSeq - latest_ack_from_receiver 在 Statistics 下拉菜单下的 I/O Graph 工具,可以直观地展示传输速度图。 同是 Statistics 菜单下的 TCP Stream Graphs 的 Window Scaling 工具,可以直观的展示 TCP Window Full 历史曲线图。 名称 Acknowledgement Number:确认号 Next Sequence Number:下个序列号 Caculated Window Size:计算后的接收窗口 Bytes in flight:在途字节数 velocity = acked_data/RTT TCP探测拥塞 概念 慢启动:每收到一个 ACK,拥塞窗口(CW)增加一个 MSS。 拥塞避免:策略是“和性增长乘性降低”,每一个 RTT,CW 增加一个 MSS。 快速重传:接收到 3 次或者以上的重复确认后,直接重传这个丢失的报文。 快速恢复:结合快速重传,在遇到拥塞点后,跳过慢启动阶段,进入线性增长。 Wireshark 序列号(会根据自己发送的数据量进行增加) Acknowledgment: Ack序号 nextSeq: 下一个序号 拥塞控制算法 (命令 sysctl) 修改拥塞控制算法 sudo sysctl net....

2022-04-20 · 2 分钟 · 283 字

Windows Powershell 美化

原始链接 https://zhuanlan.zhihu.com/p/137595941 安装 Windows Terminal MicroSoft 应用商店 安装字体 Fira Code Nerd Font https://github.com/ryanoasis/nerd-fonts/releases 安装新的 PowerShell https://github.com/PowerShell/PowerShell/releases/tag/v7.2.1 安装 PowerShell 插件 # 1. 安装 PSReadline 包,该插件可以让命令行很好用,类似 zsh Install-Module -Name PSReadLine -Scope CurrentUser # 2. 安装 posh-git 包,让你的 git 更好用 Install-Module posh-git -Scope CurrentUser # 3. 安装 oh-my-posh 包,让你的命令行更酷炫、优雅 Install-Module oh-my-posh -Scope CurrentUser 添加 Powershell 启动参数 输入命令 notepad.exe $Profile 在文本框装填入以下内容 #------------------------------- Import Modules BEGIN ------------------------------- # 引入 posh-git Import-Module posh-git # 引入 oh-my-posh Import-Module oh-my-posh # 引入 ps-read-line Import-Module PSReadLine # 设置 PowerShell 主题 # Set-PoshPrompt ys Set-PoshPrompt paradox #------------------------------- Import Modules END ------------------------------- #------------------------------- Set Hot-keys BEGIN ------------------------------- # 设置预测文本来源为历史记录 Set-PSReadLineOption -PredictionSource History # 每次回溯输入历史,光标定位于输入内容末尾 Set-PSReadLineOption -HistorySearchCursorMovesToEnd # 设置 Tab 为菜单补全和 Intellisense Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete # 设置 Ctrl+d 为退出 PowerShell Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit # 设置 Ctrl+z 为撤销 Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo # 设置向上键为后向搜索历史记录 Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward # 设置向下键为前向搜索历史纪录 Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward #------------------------------- Set Hot-keys END -------------------------------

2022-02-09 · 1 分钟 · 153 字

False Sharing

CPU-Cache 结构图 多数的CPU缓冲结构(Intel) 缓存行大小 32/64/128(现在多数为64) 解释(下面假设所有的线程都在不同的核心上) 在 不同的线程上读写某段连续的内存不同索引的值, 可能导致高速缓冲miss, 导致重复拷贝 a = [1,1,1,1,1,1] # thread 1 for {a[0]++} # thread 2 for {a[1]++} # thread 3 for {a[2]++} # thread 3 for {a[4]++} 线程写入某个值之后, 会导致其他其他的线程的缓存失效 例如 thread 1 修改了a[0] 其它线程虽然没有使用a[0], 但缓存也会失效, 需要重新获取, 会产生额外的拷贝的开销 如果需要解决这个问题, 需要将各个元素分隔到不同的缓存行, 也就是上一个元素的开始地址到下一个元素的开始地址, 间隔32/64/128 如 [1,x,x,x,x,2,x,x,x,x] 的形式进行填充 代码 package false_sharing import ( "runtime" "sync" "testing" "unsafe" ) const numCpu = 12 type increase interface { Increase(idx int) Len() int } func BenchmarkNoPadIncrease(b *testing....

2021-05-23 · 2 分钟 · 252 字

zsh,oh-my-zsh安装

# 安装zsh sudo apt-get install zsh # 将zsh切换成默认shell chsh -s /bin/zsh # 安装 oh-my-zsh sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # Add powerlevel10k to the list of Oh My Zsh themes. git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k # Replace ZSH_THEME="powerlevel9k/powerlevel9k" with ZSH_THEME="powerlevel10k/powerlevel10k". sed -i.bak 's/powerlevel9k/powerlevel10k/g' ~/.zshrc # 安装插件 git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting vim ~/.zshrc # 修改文件内容 plugins=(git zsh-autosuggestions zsh-syntax-highlighting) # 保存,执行文件 source ~/.zshrc

2021-04-24 · 1 分钟 · 65 字

Go特性记录

internal 包 [20210316] /go/src/xxx/package/internal internal 包中的内容,无法在package外被导入,否则编译不通过。

2021-03-16 · 1 分钟 · 6 字

Deployment 水平扩容和滚动更新

概念 Deployment 所管理的 Pod 的 ownerReference 就是 ReplicaSet Deployment 会拥有多个ReplicaSet, 不同的 ReplicaSet 代表不同的版本 关系图 Deployment 状态字段 DESIRED:用户期望的 Pod 副本个数(spec.replicas 的值); CURRENT:当前处于 Running 状态的 Pod 的个数; UP-TO-DATE:当前处于最新版本的 Pod 的个数,所谓最新版本指的是 Pod 的 Spec 部分与 Deployment 里 Pod 模板里定义的完全一致; AVAILABLE:当前已经可用的 Pod 的个数,即:既是 Running 状态,又是最新版本,并且已经处于 Ready(健康检查正确)状态的 Pod 的个数。 ReplicaSet 状态字段 DESIRED、CURRENT 和 READY,与 Deployment 一致,Deployment 仅多出 UP-TO-DATE 状态 滚动更新 RollingUpdateStrategy 在“滚动更新”的过程中永远都会确保至少有 2 个 Pod 处于可用状态,至多只有 4 个 Pod 同时存在于集群中 旧版本RS的Pod数量递减,新版本RS的Pod数量递增 apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginx spec: ....

2021-02-13 · 1 分钟 · 135 字

Pod 对象

Volume Projected Volume 将预先设置好的数据投射到容器中, Secret volumes: - name: mysql-cred projected: sources: - secret: name: user - secret: name: pass - ConfigMap - DownwardAPI - ServiceAccountToken restartPolicy livenessProbe 只要 Pod 的 restartPolicy 指定的策略允许重启异常的容器(比如:Always),那么这个 Pod 就会保持 Running 状态,并进行容器重启。否则,Pod 就会进入 Failed 状态 。 对于包含多个容器的 Pod,只有它里面所有的容器都进入异常状态后,Pod 才会进入 Failed 状态。在此之前,Pod 都是 Running 状态。此时,Pod 的 READY 字段会显示正常容器的个数,比如: $ kubectl get pod test-liveness-exec NAME READY STATUS RESTARTS AGE liveness-exec 0/1 Running 1 1m livenessProbe HTTP Or TCP, 多用于Web服务健康检查, Web服务中暴露出健康检查URL...

2021-02-12 · 1 分钟 · 116 字