• Linux、docker、kubernetes、MySql、Shell运维快餐


    检查端口占用

    lsof -i:[port]
    netstat -anp |grep [port]

    监控网络客户TCP连接数

    netstat -anp | grep tcp |wc -l

    获取某进程中运行中的线程数量

    ls /proc/[PID]/task | wc -l

    输出进程内存的状况,分析线程堆栈

    pmap

    统计目录容量

    du -sh

    查看文件系统挂载点容量

    df -h
    df -h |grep /dev/

    列出系统中已被格式化的设备

    blkid

    查询 Ext 家族 superblock 信息

    dumpe2fs [-bh] 设备文件名

    有用的快捷键

    服务器所有网卡带宽使用情况

    iftop <-i [interface]>

    查看内核日志

    tail -f /var/log/messages

    统计服务器进程数量

    ps -aux|wc -l

    查看全部容器资源使用情况

    docker stats $(docker ps -a --format="{{.Names}}")

    统计cpu处理器数量

    grep "model name" /proc/cpuinfo | wc -l

    查询ip讯息

    ifconfig eth0 | grep 'inet'
    ifconfig eth0 | grep 'inet' | sed 's/.inet//g' | sed 's/netmask.$//g'

    通过脚本设置密码

    echo "999999" | passwd --stdin "justmine"

    重启系统网络

    /etc/init.d/network restart

    查看主机启动了哪些网络服务

    netstat -tulnp

    备注:这个命令很有用,可以一目了然地看出主机开放了哪些端口,以及端口是否对整个Internete开放,占用的应用程序。

    查看网络请求连接数,比如监听端口8083

    netstat –nat | grep 8083

    kubernetes 清理空的副本集(Replica Set)

    1. #!/bin/bash
    2. IFS=$'\n\n'
    3. declare namespace="namespace"
    4. for row in $(kubectl -n ${namespace} get rs)
    5. do
    6. # echo ${row}
    7. declare name=$(echo "${row}"|awk '{print $1}')
    8. declare desired=$(echo "${row}"|awk '{print $2}')
    9. # echo "replica set: ${name}, desired: ${desired}"
    10. if [ $((${desired})) == 0 ]; then
    11. # echo ${name}
    12. kubectl -n ${namespace} delete rs ${name}
    13. fi
    14. done

    备注:替换成自己的namespace即可。

    判断kubernetes是否准备就绪

    以deployment为单位,准备就绪的条件为实例的当前数量、期望数量、最新数量相等,间隔10秒watch一次。可以将该脚本加入CI/D管道中。

    1. #!/bin/bash
    2. IFS=$'\n\n'
    3. #1: ready, 0: not ready.
    4. declare ready=0
    5. while [ $((${ready})) == 0 ]
    6. do
    7. sleep 10s
    8. echo ""
    9. declare AllIsReady=1
    10. for row in $(kubectl -n [namespace] get deployment)
    11. do
    12. echo ""
    13. declare name=$(echo "${row}"|awk '{print $1}')
    14. declare desired=$(echo "${row}"|awk '{print $2}')
    15. declare current=$(echo "${row}"|awk '{print $3}')
    16. declare uptodate=$(echo "${row}"|awk '{print $4}')
    17. declare available=$(echo "${row}"|awk '{print $5}')
    18. echo "deployment: ${name}, desired: ${desired}, current: ${current}, uptodate: ${uptodate}, available: ${available}"
    19. if [ $((${desired})) == $((${current})) -a $((${current})) == $((${uptodate})) -a $((${uptodate})) == $((${available})) ]; then
    20. echo "${name} has been ready.";
    21. else
    22. echo "${name} has been not ready.";
    23. AllIsReady=0
    24. fi
    25. done
    26. if [ $((${AllIsReady})) == 1 ]; then
    27. ready=1
    28. fi
    29. done

    备注:替换成自己的namespace即可。其他的资源类型同理,大家可以举一反三。

    Linux获取UUID

    cat /proc/sys/kernel/random/uuid

    mysql还原数据库,后台静默运行。

    nohup mysql -S /home/mysql/port-3306/3306_mysql.sock -h[domain name] -P3306 -u[user name] -p[password] [database name] < [databaseBackupedsql file full path] >/dev/null 2>&1 &

    docker 统计资源占用情况

    docker system df

    kubernetes 统计资源占用情况(CPU、内存)

    kubectl top node
    kubectl top pod --all-namespaces

    备注:此命令需要先安装metrics_server

    Linux 查看隐藏进程,使其现出原形。

    echo "" > /etc/ld.so.preload
    top

    备注:排查隐藏的挖矿程序。

    Linux配置SSH互信

    客户机:192.168.1.113,服务器:192.168.13.110,用户:root。

    目的

    让客户机可以免密登录服务器。

    步骤

    1. 在客户机(192.168.1.113)上生成一对SSH密钥、公钥

    ssh-keygen -t rsa 或 ssh-keygen -b 4096 -t rsa

    备注:-t表示密钥类型,-b表示密钥长度,默认1028。可以一路【回车】到底,也可以输入SSH密钥的加密密码,即pub_key。

    2. 将SSH公钥上传到服务器(192.168.13.110)

    ssh-copy-id root@192.168.13.110

    备注:这一步需要输入服务器账户root的密码。

    2.1. 异常处理

    如果发生ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!等错误,执行命令:

    ssh-keygen -R 192.168.13.110

    然后再次执行命令ssh-copy-id root@192.168.13.110

    注意:如果在步骤1输入了公钥Key,那么第一次SSH登录时,需要输入SSH密钥的加密密码

    从Linux远程服务器下载和上传文件。

    从服务器(192.168.1.110)下载指定文件(/home/mysql.tar.gz)到客户机指定目录(/home/mysql)。

    scp root@192.168.1.110:/home/mysql.tar.gz /home/mysql

    备注:输入服务器root用户密码开始下载。

    客户机上传指定文件(/root/mysql.tar.gz)到服务器(192.168.1.110)的指定目录(/home/mysql)。

    scp -r /root/mysql.tar.gz root@192.168.1.110:/home/mysql

    备注:需要先配置SSH互信,参照上面【Linux配置SSH互信】配置即可。

    linux shell脚本按长度获取本机指定端口范围内的可用端口数。

    1. #!/bin/bash
    2. IFS=$'\n\n'
    3. function check_port() {
    4. netstat -tlpn | grep "\b$1\b"
    5. }
    6. function getAvailablePorts()
    7. {
    8. echo "port range[$1 $2], the size of available ports: $3"
    9. declare ports=$(seq $3)
    10. declare index=0
    11. for((i=$1;i<$2;i++));
    12. do
    13. if check_port $i; then
    14. echo "$i port has been occupied"
    15. else
    16. ports[$index]=$i
    17. let index++
    18. if [ $(($index)) == $(($3)) ]; then
    19. break
    20. fi
    21. fi
    22. done
    23. echo ${ports[*]}
    24. }
    25. declare ports=$(getAvailablePorts 30000 32767 10)
    26. echo "the available ports of kubernetes is: ${ports[*]}"

    测试用例:按长度获取kubernetes noteport端口范围内的可用端口数。

    调用其它shell文件脚本的函数

    首先引入其他shell脚本文件,比如:. ./getAvailablePorts.sh。语法:. [filepath]。然后就可以像本地一样调用函数,比如:declare ports=$(getAvailablePorts 30000 32767 10)。

    linux shell 解析json数组

    示例

    1. #!/bin/bash
    2. IFS=$'\n\n'
    3. declare routes=$(curl -X GET http://127.0.0.1:81/services/light/routes)
    4. echo $routes
    5. declare JQ_EXEC=`which jq`
    6. declare routeid=$(echo $routes | ${JQ_EXEC} .data[0].id | sed 's/\"//g')
    7. echo ""
    8. echo $routeid

    单个对象属性

    .[对象名],例如:.data。

    Json数组某个对象属性值

    .[对象名][下标].属性名,例如:.data[0].id。

    利用kubernetes傻瓜式迁移elasticsearch数据。

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: nodejs-hello-world
    5. namespace: tools
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: nodejs-hello-world
    10. replicas: 1
    11. template:
    12. metadata:
    13. labels:
    14. app: nodejs-hello-world
    15. spec:
    16. containers:
    17. - name: nodejs-hello-world
    18. image: taskrabbit/elasticsearch-dump
    19. imagePullPolicy: Always
    20. ports:
    21. - containerPort: 3000
    22. args:
    23. - "--input=http://192.168.1.123:9200"
    24. - "--output=http://192.168.1.123:9200"
    25. - "--type=data"

    备注:input表示旧地址,output表示新地址;创建Deployment,将自动执行,全程无需参与,也不用安装nodejs的环境npm。

    Linux shell脚本调试,即打印整个执行过程

    sh -x [shell文件路径]

    Linux shell curl 弹性http请求

    1. # 允许整个操作花费的最大秒数。
    2. declare maxTime=10
    3. # 最大连接时间
    4. declare maxConnectTime=2
    5. # 重试次数
    6. declare retryCount=5
    7. # 示例
    8. curl --request GET --connect-timeout $maxConnectTime --max-time $maxTime --retry $retryCount --url [API地址]

    同步Linux服务器标准时间

    1. yum install ntp -y;
    2. ntpdate cn.pool.ntp.org;

    Linux shell 转义Json

    1. yum install jq -y;
    2. cat [json file full name] | jq tostring

    Dockerfile设置中国标准时区(CST)

    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 相关阅读:
    弘辽科技:个性化时代做好店铺标签,让你的产品卖到爆
    编译原理实验-LR语法分析
    HMI/SCADA软件架构和编程
    升级iOS CocoaPods 版本
    京东数据平台:2023年京东营养保健品市场销售数据分析
    博客系统项目
    Kafka 设计之配额(Quatos)
    【毕业设计】大数据用户画像数据分析系统 - python
    2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?
    echo -e -n
  • 原文地址:https://blog.csdn.net/m0_72431373/article/details/127078976