前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux、docker、kubernetes、MySql、Shell、kafka运维快餐

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

作者头像
justmine
发布2019-02-15 15:51:06
9530
发布2019-02-15 15:51:06
举报
文章被收录于专栏:容器化

检查端口占用

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/

查看磁盘分区信息

代码语言:javascript
复制
root> # 查看挂载哪些磁盘
root> df -h |grep /dev/
root> # 选择其中一块磁盘
root> fdisk -l /dev/xvda2

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

blkid

查询 Ext 家族 superblock 信息

dumpe2fs [-bh] 设备文件名

有用的快捷键

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

iftop <-i [interface]>

查看内核日志

tail -f /var/log/messages

查看账号登录操作日志

tail -f /var/log/secure

统计服务器进程数量

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)

代码语言:javascript
复制
#!/bin/bash

IFS=$'\n\n'

declare namespace="namespace"
for row in $(kubectl -n ${namespace} get rs)
do
#       echo ${row}
        declare name=$(echo "${row}"|awk '{print $1}')
        declare desired=$(echo "${row}"|awk '{print $2}')
#       echo "replica set: ${name}, desired: ${desired}"
        if [ $((${desired})) == 0 ]; then
#               echo ${name}
                kubectl -n ${namespace} delete rs ${name}
        fi
done

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

判断kubernetes是否准备就绪

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

代码语言:javascript
复制
#!/bin/bash

IFS=$'\n\n'

#1: ready, 0: not ready.
declare ready=0

while [ $((${ready})) == 0 ]
do
    sleep 10s
    echo ""
    declare AllIsReady=1
    for row in $(kubectl -n [namespace] get deployment)
    do
            echo ""
            declare name=$(echo "${row}"|awk '{print $1}')
            declare desired=$(echo "${row}"|awk '{print $2}')
            declare current=$(echo "${row}"|awk '{print $3}')
            declare uptodate=$(echo "${row}"|awk '{print $4}')
            declare available=$(echo "${row}"|awk '{print $5}')
            echo "deployment: ${name}, desired: ${desired}, current: ${current}, uptodate: ${uptodate}, available: ${available}"
            if [ $((${desired})) == $((${current})) -a $((${current})) == $((${uptodate})) -a $((${uptodate})) == $((${available})) ]; then
                   echo "${name} has been ready.";
            else 
                   echo "${name} has been not ready.";
                   AllIsReady=0
            fi
    done

    if [ $((${AllIsReady})) == 1 ]; then
        ready=1
    fi
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!等错误,执行命令:

代码语言:javascript
复制
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脚本按长度获取本机指定端口范围内的可用端口数。

代码语言:javascript
复制
#!/bin/bash

IFS=$'\n\n'

function check_port() {
  netstat -tlpn | grep "\b$1\b"
}

function getAvailablePorts()
{
    echo "port range[$1 $2], the size of available ports: $3"
    declare ports=$(seq $3)
    declare index=0
    for((i=$1;i<$2;i++));
    do
       if check_port $i; then
         echo "$i port has been occupied"
       else
         ports[$index]=$i
         let index++
         if [ $(($index)) == $(($3)) ]; then
            break
         fi
       fi
    done

    echo ${ports[*]}
}

declare ports=$(getAvailablePorts 30000 32767 10)
echo "the available ports of kubernetes is: ${ports[*]}"

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

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

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

linux shell 解析json数组

示例

代码语言:javascript
复制
#!/bin/bash
IFS=$'\n\n'

declare routes=$(curl -X GET http://127.0.0.1:81/services/light/routes)
echo $routes
declare JQ_EXEC=`which jq`
declare routeid=$(echo $routes | ${JQ_EXEC} .data[0].id | sed 's/\"//g')
echo ""
echo $routeid

单个对象属性

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

Json数组某个对象属性值

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

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

代码语言:javascript
复制
apiVersion: apps/v1  
kind: Deployment
metadata:
  name: nodejs-hello-world
  namespace: tools
spec:
  selector:
    matchLabels:
      app: nodejs-hello-world
  replicas: 1
  template:
    metadata:
      labels:
        app: nodejs-hello-world
    spec:
      containers:
      - name: nodejs-hello-world
        image: taskrabbit/elasticsearch-dump
        imagePullPolicy: Always
        ports:
        - containerPort: 3000
        args:
        - "--input=http://192.168.1.123:9200"
        - "--output=http://192.168.1.123:9200"
        - "--type=data"

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

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

代码语言:javascript
复制
sh -x [shell文件路径]

Linux shell curl 弹性http请求

代码语言:javascript
复制
# 允许整个操作花费的最大秒数。
declare maxTime=10 
# 最大连接时间
declare maxConnectTime=2
# 重试次数
declare retryCount=5

# 示例    
curl --request GET --connect-timeout $maxConnectTime --max-time $maxTime --retry $retryCount  --url [API地址] 

同步Linux服务器标准时间

代码语言:javascript
复制
yum install ntp -y;
ntpdate cn.pool.ntp.org;

Linux shell 转义Json

代码语言:javascript
复制
yum install jq -y;
cat [json file full name] | jq tostring

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

代码语言:javascript
复制
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

kubernetes起一个临时的MySql客户端,通过内部dns直接访问MySql服务器,无需额外开放端口,如NodePort:

代码语言:javascript
复制
kubectl run mysql-client-cluster --image=mysql:5.7 -i -t --rm --restart=Never --\
  mysql -h "server dns name" -P"端口" -u 用户名 -p'密码' -e "执行的sql语句"

备注:当测试部署到kubernetes中的mysql时,很有用。

查看MySql当前进程信息

代码语言:javascript
复制
show full processlist

linux shell function返回值

代码语言:javascript
复制
function pass_back_a_string() {
    eval "$1='foo bar rab oof'"
}

return_var=''
pass_back_a_string return_var
echo $return_var

备注:不要将eval写成echo,亲测可用,通过return $?、$()获取返回值都是不行的。

删除kafka消费组

代码语言:javascript
复制
bin/kafka-consumer-groups.sh --bootstrap-server <cluster-addr-list> --delete --group <group-name>
示例:
bin/kafka-consumer-groups.sh --bootstrap-server 182.168.1.12:4523,182.168.1.13:4524 --delete --group tianmao.production

备注:此命令只适用于新版kafka,删除前,先去zookeeper查询ls /consumers,没数据,即代表kafka未将消费组元数据存储到zookeeper;只有旧版本kafka消费组元数据会储存到zookeeper,删掉zookeeper对应的元数据即可。

Linux shell 删除内容第一行数据

代码语言:javascript
复制
# 比如:删除目录列表第一行total汇总信息
ls -l /root | awk 'NR>1'

Linux shell 字符串全部替换

代码语言:javascript
复制
function Replace()
{
  declare input=$1
  declare sourceExpr=$2
  declare targetExpr=$3
  declare output=${input//${sourceExpr}/${targetExpr}}
  eval $4=${output}
}
# 例子
Replace "microservice-autodevopspipeline-v0" '-' '.' value
echo ${value}

Linux shell 字符串转小写

代码语言:javascript
复制
function ToLower()
{
   declare input=$1
   declare output=($(echo "${input}" | tr 'A-Z' 'a-z'))
   eval $2=${output}
}
# 例子
ToLower "Microservice-Autodevopspipeline-V0" value
echo ${value}

Linux shell 动态变量取值

代码语言:javascript
复制
#!/bin/bash

function DynamicVariableValueOf()
{
  declare prefix=$1
  declare suffix=$2
  eval "output=\$$prefix$suffix"
  eval $3=${output}
}
# 例子
BasketPublishable="1"
DynamicVariableValueOf "Basket" "Publishable" value
echo ${value}

Linux shell 首字母大写

代码语言:javascript
复制
#!/bin/bash

function FirstCharUpperCase()
{
    declare input=$1
    declare output=($(echo ${input} | sed -e "s/\b\(.\)/\u\1/g"))
    eval $2=${output}
}

# 例子
FirstCharUpperCase "foo" value
echo ${value}

GitLab调试CI管道脚本

代码语言:javascript
复制
# 设置
CI_DEBUG_TRACE: "true"
# 开启Job调试参考脚本
staging-k8s-configmap_job:
  stage: staging-k8s-configmap
  variables:
    CI_DEBUG_TRACE: "true"
......
# 开启全局调试 
项目仓库 => setrings => ci/cd => Secret variables =>
添加变量:CI_DEBUG_TRACE: "true"

参考链接:https://docs.gitlab.com/ce/ci/variables/README.html

Linux shell 去掉第一行标题

代码语言:javascript
复制
# 设置
awk 'NR > 1'
# 例子
kubectl -n microservice-autodevopspipeline-v1 get rs|awk 'NR > 1'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 检查端口占用
  • 监控网络客户TCP连接数
  • 获取某进程中运行中的线程数量
  • 输出进程内存的状况,分析线程堆栈
  • 统计目录容量
  • 查看文件系统挂载点容量
  • 查看磁盘分区信息
  • 列出系统中已被格式化的设备
  • 查询 Ext 家族 superblock 信息
  • 有用的快捷键
  • 服务器所有网卡带宽使用情况
  • 查看内核日志
  • 查看账号登录操作日志
  • 统计服务器进程数量
  • 查看全部容器资源使用情况
  • 统计cpu处理器数量
  • 查询ip讯息
  • 通过脚本设置密码
  • 重启系统网络
  • 查看主机启动了哪些网络服务
  • 查看网络请求连接数,比如监听端口8083
  • kubernetes 清理空的副本集(Replica Set)
  • 判断kubernetes是否准备就绪
  • Linux获取UUID
  • mysql还原数据库,后台静默运行。
  • docker 统计资源占用情况
  • kubernetes 统计资源占用情况(CPU、内存)
  • Linux 查看隐藏进程,使其现出原形。
  • Linux配置SSH互信
    • 目的
      • 步骤
        • 1. 在客户机(192.168.1.113)上生成一对SSH密钥、公钥。
        • 2. 将SSH公钥上传到服务器(192.168.13.110)
        • 2.1. 异常处理
    • 从Linux远程服务器下载和上传文件。
      • 从服务器(192.168.1.110)下载指定文件(/home/mysql.tar.gz)到客户机指定目录(/home/mysql)。
        • 客户机上传指定文件(/root/mysql.tar.gz)到服务器(192.168.1.110)的指定目录(/home/mysql)。
        • linux shell脚本按长度获取本机指定端口范围内的可用端口数。
        • 调用其它shell文件脚本的函数
        • linux shell 解析json数组
          • 示例
            • 单个对象属性
              • Json数组某个对象属性值
              • 利用kubernetes傻瓜式迁移elasticsearch数据。
              • Linux shell脚本调试,即打印整个执行过程
              • Linux shell curl 弹性http请求
              • 同步Linux服务器标准时间
              • Linux shell 转义Json
              • Dockerfile设置中国标准时区(CST)
              • kubernetes起一个临时的MySql客户端,通过内部dns直接访问MySql服务器,无需额外开放端口,如NodePort:
              • 查看MySql当前进程信息
              • linux shell function返回值
                • 删除kafka消费组
                  • Linux shell 删除内容第一行数据
                    • Linux shell 字符串全部替换
                      • Linux shell 字符串转小写
                        • Linux shell 动态变量取值
                          • Linux shell 首字母大写
                            • GitLab调试CI管道脚本
                              • Linux shell 去掉第一行标题
                              相关产品与服务
                              云数据库 SQL Server
                              腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档