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.4187https://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.4187https://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&parameterName2=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.4187https://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}' 截取IP

kubectl

统计节点上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

/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
冲突也可以改网桥网段:
  1. 停止并删除现有的网络桥(如果需要): 请注意,这将断开连接到该网络的所有容器。确保你已经停止了所有相关容器,并准备重新配置网络。 1docker network rm <network-name-or-id> 替换 <network-name-or-id> 为你要删除的网络的名称或 ID。
  1. 创建一个新的网络桥接,并指定子网: 使用 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> 替换为你要创建的新网络的名称。
  1. 连接容器到新的网络桥接: 当你启动新的容器时,可以使用 --network 选项将容器连接到你创建的新网络。 1docker run --network=<network-name> <other-options> <image-name> 也可以将已经存在的容器连接到新网络: 1docker network connect <network-name> <container-name-or-id>
  1. 确认网络桥接配置: 使用 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

🤗 总结归纳

不总结文章的内容
 
 
💡
欢迎您在底部评论区留言,一起交流~
K8S-常见问题汇总[个人笔记]Flutter 常用Widget
Loading...
目录