Flutter
云原生
心情随笔
Golang
AI编程
技术分享
linux-k8s运维常用命令[个人笔记]
type
status
date
slug
summary
tags
category
icon
password
网址
这里写文章的前言:
这个是我的个人笔记,仅做笔记所用,非分享知识类文章……
📝 主旨内容
jalpine 安装命令:
apk search telnet
app add --no-cache busybox-extras
apk add --no-cache curl
ubuntu 安装命令:
apt-get -y install
apt update && apt install procps : 安装ps
sudo权限
docker:usermod -aG docker xiejiajia
containerd:sudo setfacl -m user:username:rw /run/containerd/containerd.sock
网卡异常:cni0
ifconfig cni0 down
ip link delete cni0
df huang
strace df -h 查看hung住的具体挂载点
fuser -mv 卸载一下 后面加这个
带宽排查:
iftop -i eth0 -P -n -o OUT 解析地址
iftop -o OUT 查出方向的带宽 【 iptraf 命令更直观】
conntrack -L | grep 'xxxxx' 查实际链接的IP
sed命令
kubectl logs nginx-ingress-controller-58cf6764f7-2vv8d -n kube-system | grep "www.shizhanspace.com" | grep "2023:16:49" | awk '{sum+=$17} END {print sum/NR}'
sed -n '/31\/May\/2023:14:54/,/31\/May\/2023:14:55/p'
Linux:
net.ipv4.conf.eth0.forwarding [flannel集群无法访问公网或者节点外地址的排查参数]
集群内无法升级组件;报错拉取镜像失败
kubectl get ds -n twistlock twistlock-defender-ds -oyaml >1.yaml
kubectl delete ds -n twistlock twistlock-defender-ds Then execute this command to delete this resource
● 系统允许的最大打开文件句柄数: cat /proc/sys/fs/file-max
● 查看当前系统上打开文件的数量: lsof|awk '{print $2}'|wc -l
● 查root用户的打开文件数量:lsof -u root | wc -l
● 云产品网段:100.64.0.0/10
● 判断节点conntrack是否打满:journalctl -k | grep "nf_conntrack: table full" [-k是只显示内核日志]
● 查看内核版本:get node -owide
● 内核参数:https://blog.csdn.net/nuomiyyq/article/details/46291093?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166895276616800180647747%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166895276616800180647747&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-46291093-null-null.142^v65^control,201^v3^control_1,213^v2^t3_control1&utm_term=sysctl 参数详解&spm=1018.2226.3001.4187
● pod内内核参数修改:https://blog.csdn.net/qq_43684922/article/details/127337294?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167022911816782390566895%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167022911816782390566895&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-127337294-null-null.142^v67^control,201^v4^add_ask,213^v2^t3_control1&utm_term=pod内更改sysctl&spm=1018.2226.3001.4187
● https://blog.csdn.net/wan212000/article/details/120605239?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166971109216800192240042%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166971109216800192240042&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120605239-null-null.142^v67^control,201^v3^control_1,213^v2^t3_control1&utm_term=rps是什么&spm=1018.2226.3001.4187
● https://blog.csdn.net/topsogn/article/details/125868323?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167989023216800217266340%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167989023216800217266340&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-125868323-null-null.142^v76^pc_new_rank,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=正则和通配符&spm=1018.2226.3001.4187
● Qos:QoS(Quality of Service)即服务质量。在有限的带宽资源下,QoS为各种业务分配带宽,为业务提供端到端的服务质量保证。例如,语音、视频和重要的数据应用在网络设备中可以通过配置QoS优先得到服务。
● RT=Reaction Time 响应时间
● kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind -n <namespace> 【过滤某名字空间下的资源】
● hostnamectl 【看内核版本,系统架构,mac地址】
● yum update -y systemd && systemctl daemon-reexec 【升级systemd】
● if [[
rpm -qa systemd < "systemd-219-67" ]]; then yum update -y systemd && systemctl daemon-reexec; fi 【升级systemd】
● hostnamectl cat /etc/centos-release【看centos版本】
● uname:【看内核版本,系统架构】
● cat /etc/os-release 查看centos版本
● cat /var/log/message |grep -i "cloud-init" > 1.txt 【添加已有节点问题】● 中文异常:
- locale -a显示容器里支持的所有LANG,从我们控制台的workbench(控制台-》容器组-》终端),进入的会默认选择一个en_ag.utf8。而通过crictl进入容器,会默认使用您之前镜像里设置的。也就是说,只要从workbench进pod,都会默认把LANG设置为en_ag.utf8 locale :显示已启用的 locale -a:显示系统已有的编码格式;没有的话就不支持 echo $LANG:打印当前语言环境 LANG="en_US.UTF-8" 或者LANG=C.UTF-8 :命令行执行声明用这个编码格式,显示中文
上述方法测试无效,启动命令/启动后命令都无法更改,只能dockerfile更改
通过启动命令:
["/bin/bash","-c","cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone"]
持久化改vim /etc/default/locale
列出所有进程的cpu/内存使用率的命令:
ps -eo pid,ppid,%cpu,%mem,args
ps aux --sort=-%mem | head -n 10 获取占用内存最高的进程,看下是否是ossfs
启用iptables
modprobe br_netfilter ; modprobe nf_nat ; modprobe xt_REDIRECT ; modprobe xt_owner; modprobe iptable_nat; modprobe iptable_mangle; modprobe iptable_filter
解密证书
● openssl x509 -text -noout -in 1.txt
● 查看证书是否过期:openssl x509 -in abc.crt -noout -dates
● 查看当前ingress使用的证书方法:
进入nginx-ingress-controller pod,使用这个命令
/dbg certs get 域名 #老版本ingress
./dbg get cert 域名 #新版本ingress
harbor仓库无法pull创建secret解决
● kubectl --namespace kube-system \
create secret docker-registry regcred \
--docker-server= \ 仓库地址
--docker-username= \ 登录名字
--docker-password= \ 登录密码
--docker-email= 邮箱地址
git
● git clone <域名> + git add . + git commit -m <备注> + git push + git log + git reset --hard ID
git init
git remote add origin https://github.com/xiejiajia01/test.git
git remote set-url origin https://github.com/xiejiajia01/test.git
git add -Agit commit -m "覆盖远程仓库的内容"
git push --force origin master/main
【代码上传;要确定能build才行,否则无法构建成功】
● lsmod |grep nat 【列出所有载入系统的模块】
● kubelet调整拉取镜像等待时间参数:/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
数据库
1.在您集群执行 kubectl run mysql-client2 --image=registry.openanolis.cn/openanolis/mysql:8.0.30-8.6 --rm -it --env MYSQL_HOST=some-mysql --env MYSQL_USER=example-user --stdin --tty -- bash
2. 进入后执行 mysql -uroot -P 3307 -h 47.95.68.52 -proot
● mysql -uroot -P port -h host -p密码
● redis-cli -h 服务器IP -p 6379 -a 密码值
● clickhouse-client --host=cc-bp1of861348o8f7r8.clickhouse.ads.aliyuncs.com --port=9004 --user=root --password=WF1Pn6ZyIHQWWnRu&database
● redis设置密码["redis-server", "--requirepass", "ctfCTF168$@"]
istio
● diff -s 文件1 文件2
● kubectl get destinationrule -oyaml
● kubectl get virtualservice -oyaml
nmap
● nmap --host-timeout 3000mS --max-rtt-timeout 3000ms --script ssl-enum-ciphers -p 443 47.109.48.109 //获取证书版本
● openssl s_client -connect qiwangwang.pier39.cn:443 -tls1_1 检查是否支持指定版本
参数:
--host-timeout: 放弃低速目标主机
--max-rtt-timeout:调整探测报文超时
--script:例举
ssl-enum-ciphers:枚举SSL秘钥
● nmap www.laziji.cc // 扫描开启的端口
nc命令
nc -vuz 120.55.83.44 53 测试udp监听是否正常
【npm 同 nc(wscat 验证websocket访问)】
https://cloud.tencent.com/developer/article/1772306
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,也可以用它安装wscat命令,此命令可用于websocket访问验证
安装npm:
wget https://nodejs.org/dist/v13.11.0/node-v13.11.0-linux-x64.tar.xz
tar -xvf node-v13.11.0-linux-x64.tar.xz
cd node-v13.11.0-linux-x64/bin
ln -s /www/node-v13.11.0-linux-x64/bin/node /usr/local/bin/node
ln -s /www/node-v13.11.0-linux-x64/bin/npm /usr/local/bin/npm
cd ~
node -v //验证
npm -v //验证
加速npm
npm install cnpm -g --registry=https://registry.npm.taobao.org
ln -s /www/node-v13.11.0-linux-x64/bin/cnpm /usr/local/bin/cnpm
cnpm install XXX //cnpm替代npm
安装wscat:npm install -g wscat
ln -s ~
wscat -c ws://echo.websocket.org //验证
grpc
go clean -modcache
go mod tidy
export PATH=$PATH:$GOROOT/bin:/root/go/bin/
export GOPROXY=https://goproxy.cn,direct
go get github.com/fullstorydev/grpcurl
go install github.com/fullstorydev/grpcurl/cmd/grpcurl
grpcurl -plaintext -d '{"name": "John"}' example.com:443 helloworld.Greeter/SayHello -import-path ~/proto -proto helloworld.proto
在上面的命令中,-plaintext 表示使用明文连接,-d 表示指定请求的 JSON 数据,example.com:443 是 GRPC 服务的地址,helloworld.Greeter/SayHello 是要调用的 GRPC 函数的名称,-import-path 和 -proto 分别指定 .proto 文件的路径和名称。
while 2>1;do grpcurl kfps-dev.kone.cn:443 list;done【alb-ingress的配置参考案例就好】
curl-1
● -H代表header头,-X是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH)
● post请求案例:curl --request POST \ --url https://api-fat.meilisci.com/member/deferred/create \ --header 'content-type: application/json' \ --data '{ "ticket": "13" }'
1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
如登录操作?分割
直接curl 是GET;curl -X POST url 则是post
curl -X POST "jsp.v2.newtimeai.com/invoice/voidBlankInvoice
4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。
就像前面所讲的一样,既然PUT和POST操作都是向服务器端发送数据的,那么两者有什么区别呢。POST主要作用在一个集合资源之上的(url),而PUT主要作用在一个具体资源之上的(url/xxx),通俗一下讲就是,如URL可以在客户端确定,那么可使用PUT,否则用POST。
5、HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
6、PATCH:put请求专注于update操作,但是与之相关的是还有一个patch请求,两者虽然都专注于update操作,但是前者是全局而言,后者是局限于某一条件或者范围而言,简单的说就是两者的粒度是不同的。
7、OPTIONS:它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
【curl-2】
https://blog.csdn.net/lovedingd/article/details/118820171?ops_request_misc=&request_id=&biz_id=102&utm_term=curl 命令卡住是为什么&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-3-118820171.142^v67^control,201^v3^control_1,213^v2^t3_control1&spm=1018.2226.3001.4187
time curl www.laziji.cc 统计时间
curl http://www.linux.com 基本用法
curl -x 192.168.100.100:1080 http://www.linux.com ##使用代理访问
curl -c cookiec.txt http://www.linux.com ##将网站的cookie信息保持到指定文件
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息 【小写L】
curl -L “http://www.baidu.com” 301/302的网站自动跳转
curl -v “http://www.baidu.com” 显示get请求全过程解析
curl -k “http://www.baidu.com” 跳过ssl检查
curl -H "Host: www.example.com" -b "hangzhou_region=always" http://47.108.219.49 可以用-b指定请求中的 cookie 值
POST 请求:
可以用 -X POST 来申明我们的请求方法,用 -d 参数,来传送我们的参数。
所以,我们可以用 -X PUT 和 -X DELETE 来指定另外的请求方法。
curl http://.../api/api -X POST -d"parameterName1=parameterValue1¶meterName2=parameterValue2"
上面就是一个普通的 post带两个参数请求
但是,当我们的接口都是 json 格式的时候,我们可以用 -H 参数来申明请求的 header
curl http://.../api/api -X POST -H"Content-Type:application/json" -d'{"parameterName1":"parameterValue1","parameterName2":"parameterValue2"}'
POST 上传文件
上面的两种请求,都是只传输字符串数据
通常我们的开发过程中也需要使用POST接口上传文件
我们添加参数 -F "file=@FILE_PATH" 传输文件即可。命令如下:
curl http://****...**/api/api/uplaod -F"file=@/Users/local/imgs/my.png" -v
案例:curl -X POST -F "file=@kubectl" fdfstorager.nustantai.com/cgroups
wget 下载文件
wget --no-check-certificate https://www.baidu.com/ ##不检查证书
网络检测:
curl -o /dev/null -s -w '%{time_connect}:%{time_starttransfer}:%{time_total}\n' 'http://kisspeach.com'
直接在用户pod里使用
curl -o /dev/null -s -w '%{time_connect}:%{time_starttransfer}:%{time_total}\n' '127.0.0.1'
看是否是pod本身导致
如果这步正常,那么是环境问题(比如节点转发,svc,slb等问题)
参数解释:
time_connect 建立到服务器的 TCP 连接所用的时间
time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
time_total 完成请求所用的时间
案例:
命令:curl -o /dev/null -s -w '%{time_connect}:%{time_starttransfer}:%{time_total}\n' 'https://padserver.zhidianfan.com/pad/business/30/table_areas' -H "USER_ID: 17500" -H "PAD_UUID: ea9197f5-e092-4683-a127-5f35464ffec9" -H "login_version: 700" -H "Accept-Encoding: gzip,deflate" -H "Authorization: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxODA3NDIyNTgyNSIsImF1ZGllbmNlIjoid2ViIiwiY3JlYXRlZCI6MTY3NTEzNjQ2NjI5OSwiZXhwIjoxNjc1NzQxMjY2fQ.TamapShog9aJ0goAFnsqRgf7vKu5lsnezg95efBUzjiQeD0oPp3RzrcU1WBRqK35JWeXZpTK1sC3jDCx0BNx7g" -H "User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G9810 Build/QP1A.1^C711.020)" -H "Host: padserver.zhidianfan.com" -H "Connection: Keep-Alive"
可用参数解释:
time_connect 建立到服务器的 TCP 连接所用的时间
time_starttransfer 在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
time_total 完成请求所用的时间
time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)
speed_download 下载速度,单位-字节每秒。
Web 服务器处理请求并开始发回数据所用的时间: time_starttransfer- time_connect
客户机从服务器下载数据所用的时间: time_total-time_starttransfer
tcpdump
https://xiaolincoding.com/network/3_tcp/tcp_tcpdump.html#显形-不可见-的网络包
循环抓包: nohup tcpdump -vv -nn -e -i eth0 host $HOSTIP -s0 -W 100 -w filename.pcap -C 25M -Z root &
列内容:
<时间> <协议> <ip+port | 主机名+协议> <数据方向> <接收方> <数据内容>
响应状态:
基于ip过滤:
tcpdump host IP 【tcpdump host 101.206.170.231】
基于IP地址的方向:【tcpdump dst/src 101.206.170.231】
基于ip网段:【tcpdump net 100.100.30.0/24】
基于网段加方向:【tcpdump src/dst net 网段】
基于端口:
tcpdump tcp port 80 【写协议时默认协议端口:tcpdump tcp port http】
tcpdump src/dst port 80
tcpdump port 80 or port 22 多端口
tcpdump portrange 8000-8080 区间端口
基于协议:
tcpdump icmp 【ip.arp,tcp,udp,ip6等都是传输层协议】
tcpdump prot http 【ssh.dns,https,都是应用层协议】
逻辑过滤:【and or not】
tcpdump -nn src host 101.206.170.231 and port 22
tcpdump tcp port 53 or udp port 53
tcpdump not tcp port 22
其他参数:
-i:指定监听网卡 【tcpdump -i any】
-w:输出到指定文件 【tcpdump -i etho -w tt.cap/pcap】
-r:查看监听到的文件 【tcpdump -r tt.cap】
-n:不解析
-nn:不解析ip和协议
-ttt:首列改为时间间隔
补充:
第一次握手syn重传默认五次,翻倍增长RTO net.ipv4.tcp_syn_retries = 5
第二次握手syn/ack重传默认五次,翻倍增长RTO net.ipv4.tcp_synack_retries = 5;这里需要注意只重传首次没有收到ack响应的ack/syn,因为seq是一致的,只重发第一次的累计完五次就好;不是25次
数据包传输时,最大重试次数15次,翻倍增长RTO,net.ipv4.tcp_retries2
快速重传看next seq,内核参数为net.ipv4.tcp_sack
2次rtt快速建立连接是net.ipv4.tcp_fastopen
延迟应答一般延迟不超过200ms;可以查看两个ack的应答包间隔时长
压测命令ab:
yum -y install httpd-tools
[root@centos7 ~]#ab -c 10 -n 100 http://a.ilanni.com/index.php
-c 10表示并发用户数为10
-n 100表示请求总数为100
http://a.ilanni.com/index.php表示请求的目标URL
这行表示同时处理100个请求并运行10次index.php文件。
[root@centos7 ~]#ab -c 10 -n 100 http://a.ilanni.com/index.php
Benchmarking 47.93.96.25 (be patient).....done
Server Software: Apache/2.4.29 ##apache版本
Server Hostname: ip地址 ##请求的机子
Server Port: 80 ##请求端口
Document Path: index.php
Document Length: 18483 bytes ##页面长度
Concurrency Level: 10 ##并发数
Time taken for tests: 25.343 seconds ##共使用了多少时间
Complete requests: 100 ##请求数
Failed requests: 11 ##失败请求
(Connect: 0, Receive: 0, Length: 11, Exceptions: 0)
Total transferred: 1873511 bytes ##总共传输字节数,包含http的头信息等
HTML transferred: 1848311 bytes ##html字节数,实际的页面传递字节数
Requests per second: 3.95 [#/sec] (mean) ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量
Time per request: 2534.265 [ms] (mean) ##用户平均请求等待时间
Time per request: 253.426 [ms] (mean, across all concurrent requests) ##服务器平均处理时间,
Transfer rate: 72.19 [Kbytes/sec] received ##每秒获取的数据长度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 8 3.9 10 13
Processing: 1222 2453 322.6 2520 3436
Waiting: 1175 2385 320.4 2452 3372
Total: 1222 2461 322.5 2528 3444
Percentage of the requests served within a certain time (ms)
50% 2528 ## 50%的请求在25ms内返回
66% 2534 ## 60%的请求在26ms内返回
75% 2538
80% 2539
90% 2545
95% 2556
98% 3395
99% 3444
100% 3444 (longest request)
客户端的优化
当客户端发起 SYN 包时,可以通过 tcp_syn_retries 控制其重传的次数。
服务端的优化
当服务端 SYN 半连接队列溢出后,会导致后续连接被丢弃,可以通过 netstat -s 观察半连接队列溢出的情况,如果 SYN 半连接队列溢出情况比较严重,可以通过 tcp_max_syn_backlog、somaxconn、backlog 参数来调整 SYN 半连接队列的大小。
服务端回复 SYN+ACK 的重传次数由 tcp_synack_retries 参数控制。如果遭受 SYN 攻击,应把 tcp_syncookies 参数设置为 1,表示仅在 SYN 队列满后开启 syncookie 功能,可以保证正常的连接成功建立。
服务端收到客户端返回的 ACK,会把连接移入 accpet 队列,等待进行调用 accpet() 函数取出连接。
可以通过 ss -lnt 查看服务端进程的 accept 队列长度,如果 accept 队列溢出,系统默认丢弃 ACK,如果可以把 tcp_abort_on_overflow 设置为 1 ,表示用 RST 通知客户端连接建立失败。
如果 accpet 队列溢出严重,可以通过 listen 函数的 backlog 参数和 somaxconn 系统参数提高队列大小,accept 队列长度取决于 min(backlog, somaxconn)。
绕过三次握手
TCP Fast Open 功能可以绕过三次握手,使得 HTTP 请求减少了 1 个 RTT 的时间,Linux 下可以通过 tcp_fastopen 开启该功能,同时必须保证服务端和客户端同时支持。
主动方的优化
主动发起 FIN 报文断开连接的一方,如果迟迟没收到对方的 ACK 回复,则会重传 FIN 报文,重传的次数由 tcp_orphan_retries 参数决定。
当主动方收到 ACK 报文后,连接就进入 FIN_WAIT2 状态,根据关闭的方式不同,优化的方式也不同:
如果这是 close 函数关闭的连接,那么它就是孤儿连接。如果 tcp_fin_timeout 秒内没有收到对方的 FIN 报文,连接就直接关闭。同时,为了应对孤儿连接占用太多的资源,tcp_max_orphans 定义了最大孤儿连接的数量,超过时连接就会直接释放。
反之是 shutdown 函数关闭的连接,则不受此参数限制;
当主动方接收到 FIN 报文,并返回 ACK 后,主动方的连接进入 TIME_WAIT 状态。这一状态会持续 1 分钟,为了防止 TIME_WAIT 状态占用太多的资源,tcp_max_tw_buckets 定义了最大数量,超过时连接也会直接释放。
当 TIME_WAIT 状态过多时,还可以通过设置 tcp_tw_reuse 和 tcp_timestamps 为 1 ,将 TIME_WAIT 状态的端口复用于作为客户端的新连接,注意该参数只适用于客户端。
被动方的优化
被动关闭的连接方应对非常简单,它在回复 ACK 后就进入了 CLOSE_WAIT 状态,等待进程调用 close 函数关闭连接。因此,出现大量 CLOSE_WAIT 状态的连接时,应当从应用程序中找问题。
当被动方发送 FIN 报文后,连接就进入 LAST_ACK 状态,在未等到 ACK 时,会在 tcp_orphan_retries 参数的控制下重发 FIN 报文。
#TCP 传输数据的性
1.查看全连接队列长度:
ss -ntl send
通过ss -lnt命令,可以看到全连接队列的大小,其中Send-Q是指全连接队列的最大值,可以看到我这上面的最大值是128;Recv-Q是指当前的全连接队列的使用值,我这边用了0个,也就是全连接队列里为空,连接都被取出来了。
查看是否存在丢弃数据
netstat -s|grep overflowed
watch -d ‘netstat -s|grep overflowed’动态更新
2.查看半连接对列长度
netstat -anpt|grep "SYN_RECV"|wc -l
通过 netstat -s 观察半连接队列溢出的情况
netstat -s |grep -i "SYNs TO LISTEN"
非三次握手丢包判断
mtr -ru baidu.com 【mtr默认时icmp协议;-u指定udp协议,-r是生成报告】
Loss那一列,我们在icmp的场景下,关注最后一行,如果是0%,那不管前面loss是100%还是80%都无所谓,那些都是节点限制导致的虚报。如果最后一行是20%,再往前几行都是20%左右,那说明丢包就是从最接近的那一行开始产生的
pod更改内核参数
#最重要的就是特权模式
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: centos7
name: centos7
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: centos7
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: centos7
spec:
initContainers:
- command:
- /bin/sh
- -c
- |
if [ "$POD_IP" != "$HOST_IP" ]; then
mount -o remount rw /proc/sys #可以不要
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w kernel.core_uses_pid=0
sysctl -w net.ipv4.tcp_keepalive_time=300
fi
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
image: registry-cn-beijing-vpc.ack.aliyuncs.com/acs/busybox:v1.29.2
imagePullPolicy: IfNotPresent
name: init-sysctl
resources: {}
securityContext:
capabilities: #可以不要
add:
- SYS_ADMIN
drop:
- ALL
privileged: true #重要;有这个可以不要那两个;否则二者缺一不可
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
containers:
- command:
- sleep
- '3600'
image: 'centos:7.6.1810'
imagePullPolicy: IfNotPresent
name: centos7-0
resources:
requests:
cpu: 250m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
k8s
ccm:管理和实现 route 控制器和 service 控制器;删除不了名字空间与路由异常以及集群角色的异常由关系
kcm:管理 pod 控制器、deployment 控制器、 service 控制器、replicaset 控制器等,静态yaml保存集群cidr信息;podCIDR由节点kubelet记录
● 初选看内存/cpu/pv依赖等;优选看cpu/内存是否平均,部署pod后是否还充足等
flannel: kubelet 会通过 flannel cni 为pod分配IP并创建cni0
下列两者的区别,有助于我们理解 flanneld 和 flannel cni 相关的配置文件的 用途。比如 /run/flannel/subnet.env,是 flanneld 创建的,为 flannel cni 提供输入 的一个环境变量文件;又比如 /etc/cni/net.d/10-flannel.conf,也是 flanneld pod (准确的说,是 pod 里的脚本 install-cni)从 pod 里拷贝到节点目录,给 flannel cni 使用的子网配置文件。
● flanneld 是一个 daemonset 下发到每个节点的 pod,它的作用是搭建网络 (干道)
● 而 flannel cni 是节点创建的时候,通过 kubernetes-cni 这个 rpm 包安装 的 cni 插件,其被 kubelet 调用,用来为具体的 pod 创建网络(分枝)。
安全组:flannel下,ACK 集群的安全组,只须考虑两种情况,一个是 Pod 跨节点互访【要过安全组】,一个 是集群和外网互访,也要过安全组;其他pod访问其他节点等,是不过安全组的【 阿里云云服务的内网地址段 100.64.0.0/10 】
节点通信:flannel模式下跨节点通信不会经过任何封包操作,出了节点是由路由表的;出集群的则需要节点 --ip-masq
kube-proxy:使用iptables的自定义链完成服务区分及转发
configmap
https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/
configmap的挂载方式有三种,一种是env,一种是subpath,这两种方式不支持热更新,如图env没有更新;但是目录挂载形式的文件内容有更新
同时可以看到主目录形式挂载时,挂载路径可以写其他名字子路径名字要和cm的data字段名字一样,第二种是目录形式挂载,这种目录形式挂载就支持热更新,但是要等一会;总结:
secret
https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/
secret/configmap的大小限制最多都是1m;且不可以在静态 Pod 中使用 ConfigMap 或 Secret。
secret中data是加密的;如果不希望执行 base64 编码转换,可以使用 stringData 字段代替。
Pod 可以用三种方式之一来使用 Secret:
● 作为挂载到一个或多个容器上的卷 中的文件。热更新
● 以 subPath 形式挂载 Secret 卷的容器而言, 它们无法收到自动的 Secret 更新。
● 作为容器的环境变量。非热更新
● 由 kubelet 在为 Pod 拉取镜像时使用。热更新
1.文件形式挂载
2.映射指定键到指定位置
3.环境变量用法
控制台总结:
1.非子路径方式挂载;则挂载的路径下会以key生成文件;文件内容是value
2.子路径形式挂载则/tmp/abc subpath为abc 这个abc必须是key;非key则无内容【找不到key】
3./tmp/config subpath为abc时,生成文件名为config;内容为value
4./tmp/abc subpath为config时,生成/tmp/abc目录;无任何文件
docker
● https://blog.csdn.net/securitit/article/details/109497201?ops_request_misc=&request_id=&biz_id=102&utm_term=docker升级&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-109497201.142^v66^control,201^v3^control_1,213^v2^t3_control1&spm=1018.2226.3001.4187
● docker system prune -a https://help.aliyun.com/document_detail/160313.html
这个命令主要是清理以下文件【注意确定文件没有用在清理;建议备份】
1、已停止的容器
2、未被任何容器使用的卷
3、未被任何容器所关联的网络
4、所有悬空的镜像
另外除了system级别的,还有针对容器或是镜像级别的删除命令:
docker image prune:删除悬空的镜像。
docker container prune:删除无用的容器。
--默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
--如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
--$ docker container prune --filter "until=24h"
docker volume prune:删除无用的卷。
docker network prune:删除无用的网络
● 节点docker的日志大小修改
/etc/docker/daemon.json //老版本呢不是kubelet定义分割 是这里定义的
"log-opts": {
"max-size": "100m",
"max-file": "10"
自建集群的secret创建方式:https://help.aliyun.com/document_detail/197661.html
使用 cat ~/.docker/config.json 可以看到用户登陆的所有域名列表。
加速器配置位置:/etc/docker/daemon.json
并发拉取配置:/etc/docker/daemon.json 【增大并发可让带宽充分利用】
{
"max-concurrent-downloads": 50,
"max-concurrent-uploads": 50
}
containerd的加速地址:/etc/containerd/config.toml【集群节点是自动注入加速器的】
containerd的账号密码登录配置:
重启pod的最优解:
docker ps | grep kube-apiserver | awk '{print $1}' | xargs -I '{}' docker restart {} || true
crictl pods | grep kube-apiserver | awk '{print $1}' | xargs -I '{}' crictl stopp {} || true
个人版仓库层信息来源:docker manifest inspect nginx:1
containerd
信任仓库等配置:https://github.com/containerd/cri/blob/master/docs/registry.md
docker命令用在containerd上:https://blog.csdn.net/luck099/article/details/131381809
当仓库地址是IP且端口不是443时,这样指定,配置后只能crictl pull 不能ctr且pull的时候也要加端口
systemctl daemon-reload && systemctl restart containerd
vim /etc/containerd/cert.d/仓库域名:port/hosts.toml
server = "http://仓库域名:port"
[host."http://仓库域名:port"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
注意, /etc/containerd/cert.d/仓库域名:port>>/这个目录得手动创建下。
这个是containerd修改为 http 拉取镜像的一个模版,业务方便的时候 重启下containerd 就可以了,注意重启containerd 是会影响当前容器运行的,一定谨慎业务低峰期操作。
https://github.com/containerd/containerd/blob/main/docs/hosts.md
拉取镜像报错:"failed to connect: failed to connect: context deadline exceeded"
执行命令:crictl config runtime-endpoint /run/containerd/containerd.sock
命令总结:https://blog.csdn.net/moyuanbomo/article/details/127111338?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166888386916782425653930%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166888386916782425653930&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-127111338-null-null.142^v65^control,201^v3^control_1,213^v2^t3_control1&utm_term=containerd 给镜像打标签&spm=1018.2226.3001.4187
配置:https://blog.csdn.net/xjjj064/article/details/107684300?ops_request_misc=&request_id=&biz_id=102&utm_term=containerd怎么登录镜像仓库&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-107684300.142^v63^control,201^v3^control_1,213^v2^t3_control1&spm=1018.2226.3001.4187 和 https://github.com/containerd/cri/blob/master/docs/registry.md
完整配置/命令:https://blog.csdn.net/qq_34777982/article/details/126652195?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166860812016782429751838%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166860812016782429751838&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-126652195-null-null.142^v63^control,201^v3^control_1,213^v2^t3_control1&utm_term=containerd命令&spm=1018.2226.3001.4187
停止和删除pod
crictl stopp podsname
crictl rmp podsname
删除pause容器:
ctr -n k8s.io c ls |awk 'NR>2 {print $1}'|grep pause |xargs -I{} ctr -n k8s.io c rm {}
下载镜像:
ctr image pull docker.io/library/redis:latest --user admin:Harbor12345
ctr -n k8s.io image pull docker.io/library/redis:latest
删除镜像:
ctr -n k8s.io image rm 172.17.0.10:5000/pause:3.5
查看您的镜像:
ctr -n k8s.io images ls #不加名字空间就能看到所有空间下的
crictl images #只能看到k8s.io空间下的
运行镜像:
ctr -n k8s.io run --rm -t <镜像:tag> cont1 #指定运行的名字空间
ctr -n k8s.io run -d docker.io/library/redis:alpine3.13 redis(运行容器的名称)
修改镜像标签:
ctr -n k8s.io image tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.5 172.17.0.10:5000/pause:3.5
推送镜像:
ctr -n k8s.io image push 172.17.0.10:5000/pause:3.5 --user admin:Harbor12345
(这里有个问题,你的私有仓库必须有配置https)
运行一个新的容器:
ctr -n k8s.io image pull docker.io/library/redis:alpine3.13
ctr -n k8s.io run -d docker.io/library/redis:alpine3.13 redis(运行容器的名称)
进入容器(--exec-id redis-sh意思是: 进入容器时的一个名称,是唯一不能重复使用的,如果发送断开再用这个名称就报错了,只能用另外一个名称)
ctr task exec -t --exec-id redis-sh redis sh
● 配置文件地址:/etc/containerd/config.toml
保存并重启containerd服务即可
systemctl restart containerd
● containerd仓库配置https://github.com/containerd/cri/blob/master/docs/registry.md
用进程PID获取到pod名字
ps -ef|grep csi
crictl ps -q |xargs crictl inspect -o yaml |grep PID -A 20 可见pod名字
pod抓包方法:
先执行kubectl get pods podname -n 命名空间 -o wide看看pod运行的节点
登录到对应的node上,执行 docker ps|grep pod名称找到容器ID,然后在执行 docker inspect -f {{.State.Pid}} 容器id 找到容器的进程pid ( crictl inspct 容器ID |grep PID)
crictl inspect $(crictl ps | grep
crictl pods | grep <podname>| awk '{print$1}' | awk '{print$1}') | jq .info.pid
给节点做个快照备份,执行yum -y install util-linux.x86_64 安装下 nsenter工具,然后执行 nsenter --target 容器pid -n 进入到容器的网络名称空间,通过tcpdump -i eth0 -s 0 -w /var/tmp/1.cap 抓包。
tcpdump -r 查看
tcpdump -n -r http.cap | awk '{print $3}' 截取IPkubectl
统计节点上pod的内存使用量:
kubectl get pod -Aowide | grep cn-hangzhou.172.16.21.16 | awk -F " " '{print $1, $2}' | while read -r namespace podname; do kubectl -n "$namespace" top pod "$podname"; done|grep -v MEMORY|awk '{sum += $3} END {print sum}' //$2是求cpu的
记录podCIDR信息
1.执行kubectl命令下载文件到本地
k8s容器拷贝文件到本地
kubectl cp order-b477c8947-tr8rz:/tmp/dump.hprof /root/test/dump.hprof
本地文件拷贝到k8s容器
tar cf - data.txt | kubectl exec -i -n qzcsbj order-b477c8947-tr8rz -- tar xf - -C /root/
2.debug
kubectl debug -it nginx-6d6bf56b7f-z6tzw --image=busybox:1.28
插件krew;krew install neat
https://krew.sigs.k8s.io/docs/user-guide/setup/install/#bash
k affinity assert wufeng-worker-workflow-5557966496-6rks6 校验pod亲和性
k inspect resource -p wufeng-worker-workflow-5557966496-6rks6 校验pod资源需求
kubectl inspect resource --show-pods
kube-linter lint yaml文件 -v 就可以把具体的错误调试出来
kubectl get pods -A -o json | jq '.items[] | select(.spec.volumes[]?.hostPath) | {namespace: .metadata.namespace, name: .metadata.name}' //查hostpath使用情况
指定节点起pod:
kubectl run alitest -it --image=nginx:latest --overrides='{"spec": {"nodeName": "cn-hangzhou.192.168.0.165"}}' bash
获取webhook
kubectl get ValidatingWebhookConfiguration,MutatingWebhookConfiguration
批量删除驱逐的pod
kubectl get pod -o wide --all-namespaces | awk '{if($4=="Evicted"){cmd="kubectl -n "$1" delete pod "$2; system(cmd)}}'
6.cadvisor状态怎么看
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/metrics/cadvisor"
kubelet
常用文件:
/etc/kubernetes/admin.conf ---kubeconfig文件位置
/var/lib/kubelet/config.yaml包含kubelete ---配置文件
/etc/systemd/system/kubelet.service ---服务【是否自动重启,重启延迟时间,swap关闭 都在此定义】
/etc/kubernetes/kubelet-customized-args.conf ---驱逐策略
1.26版本以后已经废弃;参考/var/lib/kubelet/ack-managed-config.yaml
【nodefs.available<10%,nodefs.inodesFree<5% 这个指标一般是90%以上会自动清理】
--eviction-minimum-reclaim=memory.available=0Mi,nodefs.available=1Gi,imagefs.available=2Gi 【至少清理多少】
eviction-hard:当节点可用资源低于阈值i时,会触发 pod eviction
eviction-max-pod-grace-period:eviction-soft时,终止 Pod 的 grace 时间
eviction-minimum-reclaim:每一次 eviction 必须至少回收多少资源
eviction-pressure-transition-period:默认为5分钟,脱离pressure condition的时间,超过阈值时,节点会被设置为memory pressure或者disk pressure,然后开启pod eviction
eviction-soft:不会立即执行pod eviction,而会等待eviction-soft-grace-period时间,假如该时间过后,依然还是达到了eviction-soft,则触发 pod eviction
eviction-soft-grace-period:默认为90秒
注意:分为eviction-soft和eviction-hard。soft 到达 threshold 值时会给pod一段时间优雅退出,而hard直接杀掉pod,不给任何优雅退出的机会
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/node-pressure-eviction/
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf ---服务启动参数,pod数
参数详解:
https://blog.csdn.net/cpongo1/article/details/89536077?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167050471016782429791689%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167050471016782429791689&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-89536077-null-null.142^v68^control,201^v4^add_ask,213^v2^t3_control1&utm_term=nodefs.available%3D500Mi%2Cimagefs.available%3D2Gi&spm=1018.2226.3001.4187https://blog.csdn.net/luanpeng825485697/article/details/84950594?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166988665716782414974329%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=166988665716782414974329&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-84950594-null-null.142^v67^control,201^v3^control_1,213^v2^t3_control1&utm_term=启动kubelet指定参数&spm=1018.2226.3001.4187https://blog.csdn.net/zhonglinzhang/article/details/85279788?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166745360016800186533293%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166745360016800186533293&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-85279788-null-null.142^v62^pc_search_tree,201^v3^control_1,213^v1^t3_control2&utm_term=kubelet的启动参数在哪&spm=1018.2226.3001.4187
日志:journalctl -xefu kubelet [u:指定查看的服务;f:fllow跟随;e:跳转到末尾;-x 是目录(catalog)的意思,在报错的信息下会,附加解决问题的网址]
限流关键词: Throttling
kubelet命令也能看到异常日志
journalctl -u kubelet -n 200
journalctl -u kubelet --no-pager
journalctl --since "2024-05-29 12:35" --until "2024-05-29 12:55" -u kubelet.service --no-pager > 1.txt 导出日志
cat 1.txt|grep -i kubeletnotready
或者c0c1747249da243528dbe034d88706cd1 and "cn-beijing.192.168.8.14" and "NodeNotReady" 拿到异常时间点,然后节点捞日志
cat /var/log/message ……
oom 问题
dmesg -T | grep -i oom
journactl -u kubelet |grep oom
cat /var/log/messages|grep "out of memory"
coredns
工作节点的宿主机dns有问题,然后宿主机的DNS修改后,coredns也要重启一下;否则pod内ping公网域名可能异常
svc-endpoints
1.24以后的集群,kubelet版本更新pod状态时以最新状态更新
https://github.com/kubernetes/kubernetes/issues/105467
pod的DNS域名格式为:<pod-ip>.<namespace>.pod.<clusterdomain>
sts的pod域名格式为:<pod-name>.<service - name>.<namespace>.svc.cluster.local
ETCD
同步查询:ETCDCTL_API=3 etcdctl --cacert=/var/lib/etcd/cert/ca.pem --cert=/var/lib/etcd/cert/etcd-server.pem --key=/var/lib/etcd/cert/etcd-server-key.pem --endpoints=192.168.50.169:2379,192.168.50.170:2379,192.168.50.171:2379 endpoint status
kube-proxy
https://blog.csdn.net/qq_43762191/article/details/125126090?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167015992716782414955953%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167015992716782414955953&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-125126090-null-null.142^v67^control,201^v3^control_1,213^v2^t3_control1&utm_term=kube-proxy&spm=1018.2226.3001.4187
tcptimeout 超时时间:connection reset :https://help.aliyun.com/document_detail/197320.htm?spm=a2c4g.11186623.0.0.64e312faXHhGzb#section-vkv-808-6wc
docker和containerd的文件结构
containerd:如下
/run/containerd/io.containerd.runtime.v2.task/k8s.io/容器ID/rootfs/文件 【这个是临时文件存储位置】
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/13626/fs/文件 【这个是永久文件存储位置】
docker:如下
找工作目录的方法:docker inspect xxx |grep -i workdir
docker的比较简单;同理也是持久化和非持久化的
使用ossutil命令从阿里云下载数
https://blog.csdn.net/u010797364/article/details/110127314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167679288416800211597997%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167679288416800211597997&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-110127314-null-null.142^v73^pc_search_v2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=ossutil下载文件&spm=1018.2226.3001.4187https://help.aliyun.com/document_detail/179376.html?spm=a2c4g.11186623.0.0.75de1770mXHB2m
ossfs:csi用这个命令挂载oss,默认是挂载点的所属者,无法使用chown;可以使用chmod改变权限;-oallow_other只改变挂载点的权限不包括已有文件;比如rabbitmq的镜像里面有对这个/var/lib/rabbitmq 目录chown或者chmod的逻辑,但是OSS存储卷不支持这样的操作,所以无法启动 建议使用NAS或者云盘
fsgroup是启动时对已有的文件生效,运行中上传的不行
master
集群证书位置:/etc/kubernetes/下
具体明细:https://cloud.tencent.com/developer/article/1744610
同时通过clusterrole获取token的方式1.24集群不支持了:https://blog.csdn.net/weixin_44388689/article/details/125082159
命令:
kubectl label nodes <your_node> kubernetes.io/role=<your_new_label>
批量删除Evicted 的 pod命令:
kubectl get pod -o wide --all-namespaces | awk '{if($4=="Evicted"){cmd="kubectl -n "$1" delete pod "$2; system(cmd)}}'
node
1.docker网段冲突,额外增加路由的方法:ip route add 8.148.13.120/32 via 172.22.255.253
冲突也可以改网桥网段:
- 停止并删除现有的网络桥(如果需要): 请注意,这将断开连接到该网络的所有容器。确保你已经停止了所有相关容器,并准备重新配置网络。 1docker network rm <network-name-or-id> 替换 <network-name-or-id> 为你要删除的网络的名称或 ID。
- 创建一个新的网络桥接,并指定子网: 使用 docker network create 命令创建一个新的网络桥接,并使用 --subnet 选项来指定你希望使用的子网。 1docker network create --driver bridge --subnet=<your-custom-subnet> <network-name> 将 <your-custom-subnet> 替换为你要设置的子网,例如 192.168.1.0/24,将 <network-name> 替换为你要创建的新网络的名称。
- 连接容器到新的网络桥接: 当你启动新的容器时,可以使用 --network 选项将容器连接到你创建的新网络。 1docker run --network=<network-name> <other-options> <image-name> 也可以将已经存在的容器连接到新网络: 1docker network connect <network-name> <container-name-or-id>
- 确认网络桥接配置: 使用 docker network inspect 确认新创建的网络桥接配置。 1docker network inspect <network-name>
2.超过85%节点清理无用数据数据关键词Attempting
cat /var/log/messages |grep Attempting
awk '/^Aug 2 21:(0[0-9]|1[0-5])/ {print}' /var/log/messages >2.txt
jenkins
1.24版本集群节点docker.sock问题解决 流水线中使用 docker in pod 方式构建容器镜像
https://jimmysong.io/kubernetes-handbook/guide/auth-with-kubeconfig-or-token.htmlhttps://wnote.com/post/cicd-jenkins-in-kubernetes/#1k8s集群信息配置https://developer.aliyun.com/article/1112049?spm=a2c6h.14164896.0.0.5175152bKoh6Gy
如果提示离线,检查下这个配置文件,改为国内站点,不要用谷歌/var/jenkins_home/updates/default.json,一般是热更新的
也可以按:解决方法:
1.保留此离线页面,重新开启一个浏览器tab标签页
2.输入输入网址http://localhost:8080/pluginManager/advanced
3.进入该页面最底下,找到【升级站点】,把其中的链接改成http,http://updates.jenkins.io/update-center.json ,确定保存
4.提示jenkins,在重新启动jenkins,OK,已经可以重新连网,下载插件
GPU
执行nvidia-smi命令,查看安装的GPU驱动版本
https://help.aliyun.com/document_detail/311171.html节点池的可以指定英伟达版本ack.aliyun.com/nvidia-driver-version=<驱动版本>,cuda版本用dockerfile指定就行
兼容关系:https://help.aliyun.com/document_detail/207292.html
集群版本对应的NVIDIA版本:https://help.aliyun.com/document_detail/207292.html
helm
1.helm是什么:
2.helm的使用:
3.helm的命令:
● helm search hub nginx :搜索公开的nginx的chart
● helm search repo nginx :从已有的repo中搜索nginx的chart
● helm repo add bitnami https://charts.bitnami.com/bitnami :添加一个helm仓库
● helm install --name redis --namespaces prod bitnami/redis :安装指定chart
● helm repo update :更新仓库,确定我们拿到了最新的chart
● helm repo list :查看仓库
● helm install happy-panda bitnami/wordpress:指定名字为happy-panda安装
● helm install bitnami/mysql --generate-name:Helm生成一个名称安装
● helm list:查看release
● helm uninstall 名字:卸载release
进阶:
● helm create 名字 :创建chart
● helm package chart名字:打包chart
● helm install 名字 压缩包:安装chart
● helm list -a --all-namespaces [-A]
-a, --all show all releases without any filter applied
helm --kubeconfig /.kube/config2 init ##多集群时执行命令时指定kubeconfig连接集群,helm init是给集群安装服务端【但helm3不适用了】
https://blog.csdn.net/kali_yao/article/details/120900881?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166909674816800180684319%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166909674816800180684319&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120900881-null-null.142^v66^control,201^v3^control_1,213^v2^t3_control1&utm_term=helm命令&spm=1018.2226.3001.4187https://blog.51cto.com/michaelkang/2428870https://blog.csdn.net/carefree31441/article/details/124753009?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167020535916800182743008%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167020535916800182743008&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-124753009-null-null.142^v67^control,201^v3^control_1,213^v2^t3_control1&utm_term=helm3 pdf&spm=1018.2226.3001.4187
ACR
个人版cli:
aliyun cr GET /repos/wbp-test/codeup --region cn-chengdu --version 2016-06-07 --force --endpoint cr.cn-chengdu.aliyuncs.com
aliyun cr GET /repos/wbp-test/codeup/tags --region cn-chengdu --version 2016-06-07 --force --endpoint cr.cn-chengdu.aliyuncs.com
aliyun cr GetRepoTags --RepoNamespace wbp-test --RepoName codeup --endpoint cr.cn-chengdu.aliyuncs.com
go相关:
安装:https://www.jianshu.com/p/c43ebab25484
PLEG问题:https://www.infoq.cn/article/t_ZQeWjJLGWGT8BmmiU4
windows
1.开发者工具
● network获取请求ID
https://www.cnblogs.com/xiaowenshu/p/10450848.htmlhttps://zhuanlan.zhihu.com/p/47697445
2,windows不支持csi不支持terway
3.windows上起pod:
kubectl run -it windows-pod3 --image=mcr.microsoft.cowindows/servercore:ltsc2019 --restart=Never --overrides='{ "apiVersion": "v1", "spec": { "nodeSelector": { "beta.kubernetes.io/os": "windows" }, "tolerations": [{ "key": "os", "operator": "Equal", "value": "windows", "effect": "NoSchedule" }] } }' -- cmd
🤗 总结归纳
不总结文章的内容
欢迎您在底部评论区留言,一起交流~
Loading...
Last update: 2025-04-05
一个喜欢瞎折腾的运维人~
你可以这样找到我:
抖音:运维技术手帐
ios商店app:小白单词 / timewell
微信公众号:运维开发手帐