查看kubernetes节点的硬件配置
kubectl describe node 可以查看到信息, 这里使用jq进行一下数据处理格式化.
1kubectl get node -o json | jq '.items[] | "===========================================", "机器名: \(.metadata.labels."kubernetes.io/hostname") ", "CPU: \(.status.capacity.cpu) 核", "内存大小: \(.status.capacity.memory)"'
输出结果类似于:
找出占用Kubernetes节点磁盘的Pod
有部分开发不规范导致日志写入容器, 在k8s环境下导致节点磁盘空间占用过高, 解决方案有:
通过监控告警来提前预防
挂载磁盘, 容器日志写入磁盘
使用自动清理脚本
kubectl查询每个pod占用磁盘空间1kubectl get --raw /api/v1/nodes/10.20.20.12/proxy/stats/summary | jq '.pods[] | "PodName: \(.podRef.name)", "usedBytes: \(.containers[].rootfs.usedBytes)", "======================================================"'
输出结果如图:
Docker相关操作查看容器磁盘占用12345# 节点上查看磁盘使用情况,并安装从大到小排序,可以看到各个容器的占用磁盘空间。docker ps -a --format "table {{.Size}}\t ...
Linux里安装crontab并运行
常见的linux发行版都自带了crontab服务, 但是我们常用的容器镜像是没有的, 不要问我为什么要在容器里运行crontab…Linux定时执行任务crontabLinux的crontab无法执行的一些问题
CentOS/RedHat系列安装1yum install -y cronie
配置文件位置后面的root是用户名
1/var/spool/cron/root
启动命令12345# 后台运行crond# 前台运行crond -f
Ubuntu/Debian系列安装1sudo apt-get install -y cron
配置文件位置后面的root是用户名
1/var/spool/cron/crontabs/root
启动命令12345# 后台运行cron# 前台运行cron -f
Alpine安装官方镜像自带了
配置文件位置后面的root是用户名
1/etc/crontabs/root
启动命令12345# 前台运行crond -f# 后台运行crond
快速安装 node exporter
复制粘贴就能用,适用于虚拟机安装, k8s环境看这个, 更方便Kubernetes中使用Prometheus对集群节点做监控
12345678910111213141516171819202122[ -d /data/src ] || mkdir -p /data/srccd /data/src/[ -f /data/src/node_exporter ] || wget https://file.babudiu.com/f/2Bf8/node_exporter-1.6.1.linux-amd64.tar.gztar xf node_exporter-1.6.1.linux-amd64.tar.gz/bin/cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/ && rm -rf /data/src/node_exporter-1.6.1.linux-amd64cat >/etc/systemd/system/node_exporter.service <<EOF[Unit]D ...
Dockerfile中ADD文件的路径问题
首先看一个案例
当前目录的文件如下:
12345678[root@devops_build watcher_svr]# tree.├── 1├── 2│ └── 3└── Dockerfile1 directory, 3 files
Dockerfile文件内容如下:
123FROM harbor.vrzbq.com/base/node:14.20.1-busterADD * /code/WORKDIR /code
本意是想把当前目录下的所有文件放到容器内的/code目录, 这个时候使用 docker build 后无法启动, 进入容器, 打开/code一看:
123456789[root@devops_build watcher_svr]# docker run -it test bashroot@cb7543054ef2:/code# ls -altotal 12drwxr-xr-x 2 root root 4096 Sep 22 08:47 .drwxr-xr-x 1 root root 4096 Sep 22 08:47 ..-rw-r--r-- 1 root root ...
k8s解除service端口限制
我自己写了一个svc的yaml文件,部署的时候报错,不在默认的范围内,默认范围是: 30000-32767
kubectl apply -f nginx-src.yaml
报错:
1The Service "nginx" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767
如果是kubeadm部署修改配置文件 vim /etc/kubernetes/manifests/kube-apiserver.yaml
在启动参数里面添加如下一行
1- --service-node-port-range=1-65535
重启 kube-apiserver
1kubectl delete pod -n kube-system kube-apiserver-xxx
使用RedisShake进行Redis迁移
对于自建的redis, 我们可以将rdb/aof文件拷贝到目的redis, 启动恢复, 但是云redis或者某些特殊情况, 比如没有云平台的权限等等情况, 可以使用工具来进行迁移.
RedisShake 是阿里云 Tair 团队 积极维护的一个项目。它的演变可以追溯到其初始版本,该版本是从 redis-port 分支出来的。官方文档https://tair-opensource.github.io/RedisShake/zh/guide/introduction.html
安装12wget https://github.com/tair-opensource/RedisShake/releases/download/v4.0.0/redis-shake-linux-amd64.tar.gztar xf redis-shake-linux-amd64.tar.gz
同步迁移创建一个配置文件 redis_sync.toml
12345678910111213[sync_reader]cluster = false # 是否为集群address = &quo ...
MySQL查询出所有没有主键的表
作者:May22Night链接:https://www.jianshu.com/p/f484c63e5c96
压缩版:1SELECT a.TABLE_SCHEMA,a.TABLE_NAME FROM (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys','sysdb')) as a LEFT JOIN (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY' AND TABLE_SCHEMA NOT IN('mysql','information_ ...
Linux终端复用器Screen和tmux
参考阮一峰的博客https://www.ruanyifeng.com/blog/2019/10/tmux.html
作用想象一下, 我在自己电脑远程SSH连接服务器, 正在命令行执行mysqldump, 突然(断网\电脑蓝屏)了, 那么终端就断了, mysqldump也就断了, 就需要重新来过. 终端复用器就是创建一个虚拟的终端, 可以挂在后台, 随时想进就进, 还有其他好用的功能, 比如将终端日志保存到文件内.
常用的工具有tmux和screen, tmux类似于screen, 但是功能更强大, screen 的记录日志功能很好用, 两者各有千秋. 另外终端复用器对rz/sz这种工具的兼容性都不好, 建议不要用来进行rz/sz传文件
tmux安装12345# centosyum install -y tmux# ubuntuapt-get install -y tmux
快速使用输入 tmux 即可启动, 在终端下面有一条状态栏, 显示当前的终端编号.
退出输入: exit 或者按下 Ctrl + d查看后台运行的会话: tmux ls进入会话: tmux attach -t 0
...
Jenkins pipeline中正确使用git
看到很多jenkins使用都是直接执行git clone命令, 这么做有以下几个缺点.
需要耗费时间去处理git分支, 代码冲突等工作, 还需要判断是使用 git clone 还是 git pull
账号密码(或者ssh秘钥)需要存储在构建机器上, 如果更换了构建节点, 那么需要重新配置, 即对构建环境有依赖, 构建环境是个黑盒子, 因为你不知道上个维护者在这台构建机器上做了什么.
不受jenkins管理, 比如删除流水线, 拉取的代码任然存在机器上
做个分支选项框是个痛苦的事情将代码交给jenkins管理则省去了这些操作.
使用凭据管理账号密码在 系统管理 – 凭据 – 系统 – 全局凭据 里面增加一个新的凭据
成功后记录一下ID
编写流水线1234567891011121314151617pipeline { agent any parameters { gitParameter branch: '', branchFilter: '.*', defaultValue: '', ...