ᕕ( ᐛ )ᕗ Jimyag's Blog

常用的脚本

介绍 链接
从源码编译安装/升级 golang install-golang.sh
用 go install 安装的工具 install-golang-tools.sh
linux 安装 docker get-docker.sh
ubuntu 初始化安装的工具 ubuntu-init.sh
tailscale 安装 install-tailscale.sh
ubuntu 桌面 安装 chrome ubuntu-desktop-install-chrome.sh

docker

安装 docker

sudo curl -fsSL https://getdocker.jimyag.workers.dev/ | sh
sudo usermod -a -G docker $USER

卸载 docker

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

sudo ip route del 172.17.0.0/16 dev docker0
sudo ip route del 169.254.0.0/16 dev docker0
sudo ip link delete docker0

计算某个文件的增长速度

n=5; file="./test"; size1=$(stat -c%s "$file"); sleep $n; size2=$(stat -c%s "$file"); growth=$(echo "scale=2; ($size2 - $size1) / $n" | bc); if (( $(echo "$growth >= 1073741824" | bc) )); then echo "$(echo "scale=2; $growth / 1073741824" | bc) GB/s"; elif (( $(echo "$growth >= 1048576" | bc) )); then echo "$(echo "scale=2; $growth / 1048576" | bc) MB/s"; else echo "$growth B/s"; fi

删除几点前的所有文件

find ./ -type f -not -newermt "$(date '+%Y-%m-%d 22:00:00')" -delete

按照 ip 进行排序

tailscale status | awk '{print $1 ,$2}' | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4

设置系统时区

sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

提取主机名并去重

cat host.yml | grep yzh  | sed 's/://g' | tr -d ' ' | sort|uniq |  tr '\n' ',' | sed 's/,$//g'

cpu/内存 使用最高的 10 个进程

ps -eo pid,ppid,user,command,%cpu,%mem --sort=-%cpu | head -n 10
ps -eo pid,ppid,user,command,%cpu,%mem --sort=-%mem | head -n 10

k8s 常用命令

通过机器过滤 pod

kubectl get po --field-selector=spec.nodeName=node1 -A

查看 pod 的描述

kubectl describe po -n spark xxxx

删除执行成功的 pod

kubectl delete pod -n spark --field-selector=status.phase=Succeeded
kubectl delete po -n spark --field-selector status.phase=Succeeded

运行一个测试 pod

kubectl run test-pod --namespace=test --image=busybox --command -- sleep 3600

查看包含某个 label 的 pod 的日志

kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --since=1m  -f 

进入某个 container

kubectl exec -it -n defy yzh-flume-qdcdn-ngxerr-67df54b9c5-ppwl5 --container=flume-metrics -- bash

helm 渲染 chart 结果

helm template --debug -f test_values.yaml <chart name or chart path>

给某个 node 打上标签

kubectl label node node1 node-role.kubernetes.io/ingress=

给某个 node 删掉标签

kubectl label node node1 node-role.kubernetes.io/prometheus-

覆盖某个 node 的标签

kubectl label nodes node1 test=false --overwrite

查询某个 node 的标签

kubectl get nodes node1 node2 --show-labels

重启 pod

kubectl rollout restart deployment -n spark test 
kubectl delete pod -n spark test-67df54b9c5-ppwl5

从 pod 中拷贝文件

kubectl cp spark/test-67df54b9c5-ppwl5:/app/logs/flume-metrics.log ./

kubectl cp  ./test.sh spark/test-67df54b9c5-ppwl5:/app/logs/

回滚服务

# 查看服务版本
helm history -n spark test

# 回滚到 4 版本
helm rollback -n spark test 4

下线某个 node

# 标记 node 为不可调度
kubectl cordon node1

# 驱逐 node 上的 pod
kubectl drain node1 --ignore-daemonsets --delete-emptydir-data

# 删除 node 
kubectl delete node node1

或者使用 kubespary 中的下线功能