1、获取脚本当前所在路径
2、数组接收多个值
演示
数组调用案例
3、比较浮点值
演示
4、删除匹配文本所在的行
演示
返回
5、替换文件中最后一行的数据
演示
6、删除文本最后一行的数据
7、ss.sh: line 7: [: ==: unary operator expected
我们可能使用了如下的语法,当变量STATUS没有值的时候就会报错
这里只要将中括号换成双中括号 改为等于值即可
8、按照日期备份文件
9、输出文本中倒数第二列的值
演示
10、判断变量、文件、目录是否有值
11、获取匹配到数据的 值的上一行或下一行
12、给文件中所有行首行尾添加数据
13、给指定匹配到的文本后、匹配的文本的末尾追加配置
上面我们通常是覆盖配置用的,还有一种情况是直接追加文本到匹配的行的末尾
14、将多行数据转换到一行内显示
15、将匹配到的多个数值做加法运算
16、数值排序 去重
17、过滤匹配多个对象
18、过滤指定的匹配对象,非模糊匹配
19、免交互修改用户密码
20、过滤文件或目录
21、查看包含字符串的文件
22、查看当前服务器架构
23、数组值的追加
24、去除小括号特殊字符
25、shell 批量导入文本数据到数据库
有段时间没有其他语言的环境,只能用shell去把数据写入到数据库
导入数据库时碰到的两种报错
26、 查询数据库的数据转换为xls文件
27、将多个xlsx表 合并成一个execl表,每个表作为sheet页显示
当时我们批量获取的表数据是作为单独的xls表存在的,这里合并到一个表里
25、26、27当时写一个脚本一起用的
28、感觉不错的正则表达式文章
29、卸载挂载卷 并将容量转换给其他lv卷
30、检查输入的ip地址是否规范
31、vsftp服务管理脚本(未验证)
32、docker镜像合并打包
33、批量修改不同主机不同密码为相同密码
34、带颜色的文本输出
35、linux调优
36、生成随机字符串
37、python pip从nexus 拉包
38 查看指定时间区间的日志
39、根据剩余磁盘空间快速扩容lv卷
40、计数器
案例
41、执行脚本时获取执行过程
42、命令执行失败则退出脚本语法
返回
当cd命令执行报错后就不会在往下执行了,退出脚本,打印错误
43、判断linux服务是否启动成功
44、读取文件值作为循环体
45、gfs使用率查询
46、批量telnet 测试端口防火墙是否正常
47、通过api的方法去harbor仓库查询镜像
48、awk 条件判断
49、通过etcd api 增删改查
50、grep 语法整理
51、通过prometheus接口获取数据
比如我们想要周期性的去清理K8S node的文件系统,机器数量过于庞大,如果放一个脚本到所有node上,那么每次新增就会很麻烦,还需要把脚本写入到安装程序中,这里为了写个外置的工具,用到了prometheus的一个接口
操作步骤
复制下来的url如下
我们想要使用的话要将后面的time去掉,得到如下地址
注意
我们要查询的语句在prometheus页面就定义好了再取,不然没有转化我们直接写在query=后面的语句是不生效的,还有取下来的()括号 我们可以在url前后添加单引号让其不生效
52、通过curl带json数据请求POST
53、rsync 同步数据包的方法
54、linux crontab 计划任务
55、linux 时间戳函数
56、统计路径下大文件
57、 快速主机跳转
58、简易压测脚本
59、主机间网络丢包测试
60、 框架数据返回消息模板
61、脚本因为编码问题导致不同主机上不可用
62、github下载代理加速
63、快速删除大量文件
64、安全迁移数据到新目录
说明
65,变量替换
66 数据迁移
67、udp端口检测
68、根据匹配项替换整行
69、统计df 大于80的信息
0、比较全的ansible参数
1、ansible变量开关
对应调用的语法
返回
正常执行没有变化 ,反过来当我们不想去调用某一部分的语法时可以设置为off
vi group_vars/all.yml
我们可以在web页面去读取全局的配置,将写好想要安装的部分选择为on,不安装的部分选为off
2、ansible 剧本运行时传入变量
我们先在任务中定义要使用的变量名称,如下
可以看到上面想要输出一个cluster变量的值,但是我们没有定义,需要在启动时传入
执行
案例2 指定运行的主机组
vi xx.yml
调用
3、ansible 引用外部json文件的值
vi /etc/ansible/roles/test/tasks/vars/admin.json
我们随便定义一个json文件 ,我们在ansible中取值
vi main.go
取单个值
运行
返回值
可以看到,我们通过传入的集群名称,调用到了对应集群名称的value值
when支持的方法
4、检查命令是否执行成功
5、指定某一台主机只执行一次task任务
6、ansible操作自身 (任务委派)
特殊情况下,我们需要通过ansible调用ansible自身的主机,但ansible主机不在hosts列表
任务委派场景
7、服务异步执行
可能基于一些稀奇古怪的原因,服务启动很慢,我们又不想等他完事了在跑,我们可以添加异步模式,先跑下面的任务
8、ansible滚动执行
默认情况下,我们ansible工具是并行对所有的主机执行相同的task任务,但有的时候,我们会希望能够逐台运行
比如,我们代理的后端节点,又或者K8S的node主机,我们在更新的时候也不希望全部都挂掉
我们让一部分主机先去跑,如果没问题了后面的主机再去跑,不然就停掉
vi setup.yml
当task失败时,ansible会停止执行失败的那台主机上的任务,继续对其他主机执行,这样很不好,如果第一台跑错了,那么后面基本上都就跑错了,要做个调整
vi setup.yml
9、debug模块一些常见的值
10、ansible 错误处理
block中的任务在执行中,如果有任何错误,将执行rescue中的任务
无论在block和rescue中发生或没有发生错误,always部分都运行。
11、ansible发送公钥到node主机
12、ansible validate 校验服务文件是否正确
在一些场景下,我们修改完文件后,需要对文件做一下测试,用以检查文件修改之后,是否能正常运行。如http.conf、nginx.conf等,一旦改错,而不加以测试,可能会直接导致http服务挂掉。
13、ansible 一条命令获取远程主机文件到当前主机
14、 ansible全局变量参考
15、 使用普通用户 借用root权限
16、ansible大批量主机处理
背景
我现在需要给20000台主机做重启任务升级内核
我将我ansible.cfg的fork并发开启到了 200,这个意思是同一个任务下并发执行200台主机
我的思路就是将20000台主机分组,每个组200台,同时跑,但这个对服务本身宿主机性能有较大影响(卡死)
我8C16G内存的配置,跑20000直接卡死,目前在跑2000+作用的时候很快,3000直接卡死
17、项目启动脚本案例
ss.sh
vi main.yml
vi group_vars/all
roles 目录自定义即可,目录名为k8s 具体任务自定义
1、提高kubectl使用效率
2、解决容器和主机时间不同步问题
3、docker 全方位清理
4、删除僵尸ns
Finalizers 是 Kubernetes 中一种机制用来在删除资源时执行一些清理任务。在 Kubernetes 中,当你删除一个资源时,Kubernetes 会给该资源发送一个删除信号,Kubernetes 控制器收到删除信号后,便会在资源上添加一个 Finalizer(一个字符串列表)。当这个资源被删除时,Kubernetes 控制器就会检查该资源上的 Finalizer 是否都已经被处理过,如果没有,则执行相应的清理任务,并将 Finalizer 删除,最后再删除资源本身。
以下是通过 Finalizers 删除 namespace 的步骤:
5、删除etcd指定的key下的所有值 (shell)
6、进入docker容器尸体的方法
7、设置kubelet容器保留时间
8、容器反复重启检查思路
9 、驱逐+不可调度
10、副本数为1的模板 启动了2个pod (大规模场景)
11、在容器内无法解析域名
12、不同版本之间etcd状态查看
13、一些开源组件
14、docker查看基础镜像
15、kwok 模拟测试神器
kwok 模拟测试神器, 模拟大规模pod运行,用于创建删除大批量pod测试
16、 集群联邦
Karmada是由CAICloud发布的一个开源的Kubernetes多集群管理系统。它通过提供自定义资源对象(Custom Resource Definition, CRD)和Kubernetes API 扩展,利用 Kubernetes 强大的 API 扩展和资源调度能力实现多集群管理。Karmada 的设计目标主要是提供一个轻量、易用、高性能的多集群应用编排和管理系统,可以针对一系列场景,如多云管理、多区域管理、混合云等。Karmada能够自动实现跨集群的资源调度和管理,运行在源集群中的应用自动部署到联盟集群中,提供了云原生应用跨集群、跨云平台部署和编排的能力。
17、kubeadm证书过期恢复
18、关于容器日志上送
19、etcd基本访问
20、基于pod名称取控制器名称
返回
21、etcd存储满了报错etcdserver: mvcc: database space exceeded
描述
临时解决方法
优解 解决方法
22 报错留存
23、删除7天的deloyment
24、etcd问题
我新搭建了一套K8S集群,但是有一台etcd始终有点问题,说不上来一直503,偶尔还换到另外几台503, 最后通过ping 发现 14主机的延迟80ms 15和16延迟2ms 咨询系统组,发现该主机宿主机型号不同,迁移后发现3台主机ping延迟一致后,masteretcd恢复正常,确定ping延迟对etcd请求返回的速度有影响
25、node主机资源预留
kubectl describe node ip 查看Capacity是总量, Allocatable 是允许用多大
隔壁flask文档参考(很详细)
1、harbor仓库认证
背景: 服务都跑在容器里,流水线推送镜像到多个harbor仓库时可能遇到一些不可抗力的因素导致镜像并不能同步到所有的仓库(比如仓库镜像在清理,或者某台节点挂了导致镜像没用同步到),这样即使再跑一遍流水线依旧无法同步到镜像,这时需要个小工具给使用人员批量查询镜像是否存在,根据存在的镜像手工同步下,但不能给一些用户登陆信息
返回
2、读取变量配置文件
程序中通常会存在一些通用属性,但是放在单个py文件中作为全局变量远远不够,我们单独定义一个py文件作为我们的配置文件
vi config.py
vi main.py
返回
3、linux 中运行python程序
vi main.py
4、通过shell脚本控制器python程序启停
vi test.sh
适用于我们程序本身是服务端比如flask框架指定的路由
5、sys库
6、随机库 random
特定情况下我们需要将已有列表的数据打乱来使用
返回
7、调用字典中列表的数据
8、判断多个变量是否存在值
9、多进程运行
10、python xlrd调用excel表
11、python 远程控制linux
12、python 从入门到入土 90个案例(赞)
13、通过K8S master 及deployment名称获取存活pod的进程日志
14、xlsx找到指定文本并在文本后面添加数据
15、关于linux中调用python中oracle所需客户端的依赖问题
16、python 带Kubuconfig 认证访问集群信息
我们首先需要登录集群获取到认证的一个json数据,然后覆盖下面代码中的kubeconfig_dict的变量
代码
17、python django与vue文件交互代码
18、关于python调用harbor仓库的一些接口
19、多层try的嵌套执行关系
20、django导出数据库表
1、查看gfs卷
2、卷数据均衡
其他
3、gfs卷脑裂修复
发现问题
应用在使用gfs卷中,发现某个目录 一直报错 Input/output error ls 都不行,无法删除
使用如下命令检查
正常应该是3个0,如果不是就是脑裂
修复 方法
我们上面能看到3台主机上的btrick路径,我们登录3台主机,du -sh . 查看大小,选个文件大的主机保留,另外两台主机的brick目录下内容全部删除,然后等待同步即可
4、.nfs0000000 文件删除不了,, device or resource busy
A客户端打开文件a不是否,b客户端移动或者删除文件a,则文件a小时,但出现名称类似.nfs0000开头的文件,该文件所在进程服务i去无法删除或者移动,但是可以在其他挂载的nfs服务器挂载后直接删除
或者在特殊情况下也可以lsof .nfs000 杀死进程也可释放
5、df -h 和du -sh *的容量不一致
如果nfs是异地同步带宽只有300M,而应用写入宿主机为100-500M,未同步的数据会堆积在存储空间中形参保护容量,导致不一致
6、ls 或者find 报错no such file
一个客户端在扫描nfs目录(find 或者ls) 的同时,另一个挂载客户端执行删除目录下的文件,有概率发生,原因未ls或者find具体细分未2个操作,第一个是read dir读取目录下所有项目,第二个是对目录下所有项目执行stat查看属性,原因为readdir 仅仅返回名称,无法分辨是文件还是目录,find会搜索子目录,所以要遍历,ls可以通过 ls --folor=none 避免对所有文件stat 从而大幅度提高速度,由于有概率发生readdir的时候文件还在,stat的时候文件依旧被删除了,所以会导致失败
7、Input/output error
查看message发现有nfs: server xxx.xxx.xxx.xx not responding timed out 日志,原因是客户端千兆网络,网络带宽被打满导致,nfs在网络异常的时候timeout实际为3分30s 之后返回input/output error
8、文件系统写满后导致的gfs索引占用
在使用gfs的时候,如果你间的盘满了,但没有即使清理,那么时间久了 gfs的索引会占用额外空间,即使已经清理了df -h 也显示不正常,需要登陆gfs服务器