kubectl 命令相关操作

在一些场景里,我们需要批量对K8S服务做一些调整,以下分享几个kubernetes常用管理脚本,批量管理K8S服务比较方便。


#!/bin/bash
# 列出指定namespace的所有deployment服务
deployments=$(kubectl get deployment -n <namespace> -o jsonpath='{.items[*].metadata.name}')
# 需要过滤的服务列表
filtered_services=("nacos" "kafka" "zk" "redis" "kibana" "kafka" "minio" "kafka-map")
# 循环遍历每个deployment服务
for deployment in $deployments; do
  # 检查是否在过滤列表中
  if [[ " ${filtered_services[@]} " =~ " ${deployment} " ]]; then
    continue
  fi
  # 添加环境变量到deployment服务中
  kubectl set env deployment/$deployment -n <namespace> SW_LOGGING_OUTPUT='' SW_LOGGING_LEVEL='OFF'
done

这个脚本的功能是列出指定命名空间中的所有deployment服务,并在过滤列表之外的服务中添加环境变量。具体的步骤如下:

    • 使用kubectl命令获取指定命名空间中所有deployment服务的名称。命令为:kubectl get deployment -n <namespace> -o jsonpath='{.items[*].metadata.name}'。将结果保存在deployments变量中。

    • 定义一个需要过滤的服务列表,包含了不需要进行操作的服务名称。

    • 使用循环遍历每个deployment服务的名称。

    • 在循环中,检查当前的deployment服务名称是否在过滤列表中。如果在过滤列表中,则跳过当前循环,进入下一次循环。

    • 如果当前的deployment服务名称不在过滤列表中,则使用kubectl set env命令为该deployment服务添加环境变量。命令为:kubectl set env deployment/$deployment -n <namespace> SW_LOGGING_OUTPUT='' SW_LOGGING_LEVEL='OFF'。这里将两个环境变量SW_LOGGING_OUTPUT和SW_LOGGING_LEVEL的值分别设置为空字符串和OFF。

总之,这个脚本的作用是在指定命名空间中的所有deployment服务中,为除了过滤列表中的服务之外的其他服务,添加两个特定的环境变量。


for i in `kubectl get pod -A|grep Evicted|awk '{print $1}'|sort -u`;do kubectl get pod -n $i | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n $i;done

这个脚本的功能是删除所有命名空间中状态为"Evicted"的Pod。具体的步骤如下:
使用kubectl get pod -A命令获取所有命名空间中的Pod信息。

使用grep Evicted命令过滤出状态为"Evicted"的Pod。

使用awk '{print $1}'命令提取出Pod的命名空间,并通过sort -u命令去重。

使用for i in kubectl get pod -A|grep Evicted|awk '{print $1}'|sort -u`进行循环,遍历每个命名空间。

在循环中,使用kubectl get pod -n $i命令获取当前命名空间中所有Pod的信息。

使用grep Evicted命令过滤出当前命名空间中状态为"Evicted"的Pod。

使用awk '{print $1}'命令提取出这些Pod的名称。

使用xargs kubectl delete pod -n $i命令删除这些Pod,其中$i是当前循环的命名空间。总之,这个脚本的作用是删除所有命名空间中状态为"Evicted"的Pod。
 


#!/bin/bash
#保存备份个数,备份31天数据
number=7
#备份保存路径
backupdir=/data/backup/etcd
#日期
dd=`date +%Y-%m-%d-%H-%M`
echo $dd
if [ ! -d $backup_dir ];
 then
   mkdir -p $backup_dir;
fi
etcdctl --endpoints 127.0.0.1:2379 --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --cacert="/etc/kubernetes/pki/etcd/ca.crt" snapshot save /data/backup/etcd/snapshot-${dd}.db
#写创建备份日志
echo "create $backupdir/$dd.db" >> $backupdir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $backupdir/*.db | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backupdir/*.db | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backupdir/log.txt
fi


这个脚本的功能是对etcd进行备份,并保留最近7天的备份文件。
具体的步骤如下:
定义备份保存的路径为/data/backup/etcd,定义需要保留的备份天数为7。
获取当前日期和时间,并保存在变量dd中。
检查备份保存路径是否存在,如果不存在,则创建该路径。
使用etcdctl命令备份etcd数据到/data/backup/etcd/snapshot-${dd}.db文件中,同时指定etcd的连接参数和证书。
将备份的文件路径和日期写入备份日志文件$backupdir/log.txt中。
使用ls命令按时间顺序列出备份路径下所有的备份文件,并通过awk命令提取出最早生成的备份文件路径。
使用wc -l命令统计备份文件数量,并保存在变量count中。
如果备份文件数量大于设定的保留天数,则删除最早生成的备份文件。
将删除的文件路径写入备份日志文件$backupdir/log.txt中。
总之,这个脚本的作用是对etcd进行备份,并保留最近7天的备份文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值