Kubernetes-Kubectl篇-01-常用命令

kubectl 常见命令

登录命令

根据机器ip使用kubectl登录机器(field-selector):

#!/bin/bash
export targetIp="6.0.90.240"#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'podinfo=`kubectl get pod --all-namespaces --field-selector=status.podIP="$targetIp" -o wide | grep -v NAME | head -n 1 `
ns=`echo ${podinfo} | awk '{print $1}'`
pod=`echo ${podinfo} | awk '{print $2}'`echo "$kubectl exec -it -n ${ns} ${pod} -- su - root"
kubectl exec -it -n ${ns} ${pod} -- su - root

根据机器ip使用kubectl登录机器(label):

#!/bin/bash
export targetIp="6.3.144.241"#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'podinfo=`kubectl get pod --all-namespaces -l sigma.ali/ip="$targetIp" -o wide | grep -v NAMESPACE`
ns=`echo ${podinfo} | awk '{print $1}'`
pod=`echo ${podinfo} | awk '{print $2}'`echo "$kubectl exec -it -n ${ns} ${pod} -- su - root"
kubectl exec -it -n ${ns} ${pod} -- su - root

更智能版本的kubectl登录命令:

  • 查看KUBECONFIG_DIR目录下有哪些kubeconfig可以用
  • 校验目标登录的ip格式
  • 查询并解析pod信息
  • 查询该pod有哪些容器并展示
  • 查询选定的容器有哪些用户(与user_array做交集),支持自定义输入用户
  • 根据以上信息登录目标ip对应pod的选定容器
#!/bin/bash# 添加特定用户
user_array=("root" "admin" "log")# 从指定目录获取所有 kubeconfig 文件
KUBECONFIG_DIR="/Users/king/.kube"# 初始化 kubectl 命令前缀
KUBECTL_CMD="kubectl"# 确保将信息打印到终端里,即使在函数之间$(...)调用的场景
function print_to_console() {printf "%s\n" "$1" >&2
}# 检查IP地址是否符合正确的格式
function is_valid_ip() {local ip=$1local valid_regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$'if [[ $ip =~ $valid_regex ]]; then# 确保每个数字部分小于等于255IFS='.' read -r -a octets <<< "$ip"for octet in "${octets[@]}"; doif ((octet > 255)); thenreturn 1fidonereturn 0fireturn 1
}KUBECONFIGS=($(find $KUBECONFIG_DIR -maxdepth 1 -name "*.config" -print))# 检查是否找到 kubeconfig 文件
if [ ${#KUBECONFIGS[@]} -eq 0 ]; thenprint_to_console "没有找到任何 kubeconfig 文件在目录: $KUBECONFIG_DIR"
else# 提供给用户选择的菜单,动态生成选项范围提示cat << EOF----------------------------------------------|*******Please Enter Your Choice:[1-${#KUBECONFIGS[@]}]*******|----------------------------------------------
EOF# 输出可供选择的配置文件选项for i in "${!KUBECONFIGS[@]}"; doprint_to_console "*     $(($i + 1)) ${KUBECONFIGS[$i]}"done# 捕获用户输入并确保在合法范围内while true; doread -p "please input your choice [1-${#KUBECONFIGS[@]}] (or press Enter to skip): " numif [[ -z "$num" ]]; thenbreakelif [[ "$num" =~ ^[0-9]+$ ]] && [ "$num" -ge 1 ] && [ "$num" -le ${#KUBECONFIGS[@]} ]; thenselected_config="${KUBECONFIGS[$((num - 1))]}"KUBECTL_CMD="kubectl --kubeconfig=$selected_config"print_to_console "Using configuration file: $selected_config"breakelseprint_to_console "Invalid choice. Please try again."fidone
fi# 输出用户选择的配置文件
selected_config="${KUBECONFIGS[$((num - 1))]}"
print_to_console "You selected: $selected_config"# 捕获用户输入的targetIP
while true; doread -p "please input your target ip: " targetIP# 检查输入是否为空和格式有效性if [[ -z "$targetIP" ]]; thenprint_to_console "IP 地址不能为空,请重新输入。"elif ! is_valid_ip "$targetIP"; thenprint_to_console "无效的IP格式,请输入有效的IP地址。"elseprint_to_console "您输入的IP地址是: $targetIP"breakfi
done# 获取 Pod 信息
podinfo=$($KUBECTL_CMD get pod --all-namespaces --field-selector=status.podIP="$targetIP" -o wide | grep -v NAME | head -n 1)# 检查 podinfo 是否为空
if [[ -z "$podinfo" ]]; thenprint_to_console "未能获取到对应 IP 的 Pod 信息,退出脚本。"exit 1
fi# 提取命名空间和 Pod 名称
ns=$(echo "${podinfo}" | awk '{print $1}')
pod=$(echo "${podinfo}" | awk '{print $2}')# 检查 ns 和 pod 是否为空
if [[ -z "$ns" || -z "$pod" ]]; thenprint_to_console "未能提取到命名空间或 Pod 名称,退出脚本。"exit 1
fiprint_to_console "Namespace: $ns, Pod: $pod"# 获取容器列表
containers=($($KUBECTL_CMD get pod $pod -n $ns -o jsonpath='{.spec.containers[*].name}'))
selected_container=""
if [ ${#containers[@]} -gt 0 ]; thenprint_to_console "请选择一个容器 (或直接按 Enter 跳过使用默认容器):"for i in "${!containers[@]}"; doprint_to_console "*      $(($i + 1)) ${containers[$i]}"donewhile true; doread -p "please input your choice [1-${#containers[@]}] (or press Enter to skip): " container_numif [[ -z "$container_num" ]]; thenbreakelif [[ "$container_num" =~ ^[0-9]+$ ]] && [ "$container_num" -ge 1 ] && [ "$container_num" -le ${#containers[@]} ]; thenselected_container="${containers[$((container_num - 1))]}"print_to_console "Selected container: $selected_container"breakelseprint_to_console "Invalid choice. Please try again."fidone
fi# 解析容器中的用户并添加到用户数组中
while IFS=: read -r username _ uid _; doif [[ $uid -ge 1000 && $username != "nobody" ]]; thenuser_array+=("$username")fi
done <<< "$user_list"# 显示可供选择的用户列表
print_to_console "请选择一个用户 (或自定义输入):"
for i in "${!user_array[@]}"; doprint_to_console "*      $(($i + 1)) ${user_array[$i]}"
done
print_to_console "*      $(( ${#user_array[@]} + 1 )) 自定义输入 "# 捕获用户选择的用户
while true; doread -p "please input your choice [1-$(( ${#user_array[@]} + 1 ))]: " user_numif [[ "$user_num" =~ ^[0-9]+$ ]] && [ "$user_num" -ge 1 ] && [ "$user_num" -le $(( ${#user_array[@]} + 1 )) ]; thenif [ "$user_num" -eq $(( ${#user_array[@]} + 1 )) ]; thenread -p "请输入自定义用户名: " targetUserelsetargetUser="${user_array[$((user_num - 1))]}"fiprint_to_console "Selected user: $targetUser"breakelseprint_to_console "Invalid choice. Please try again."fi
done# 执行命令
if [[ -n "$selected_container" ]]; thenprint_to_console "$KUBECTL_CMD exec -it -n ${ns} ${pod} -c ${selected_container} -- su - $targetUser"$KUBECTL_CMD exec -it -n ${ns} ${pod} -c ${selected_container} -- su - $targetUser
elseprint_to_console "$KUBECTL_CMD exec -it -n ${ns} ${pod} -- su - $targetUser"$KUBECTL_CMD exec -it -n ${ns} ${pod} -- su - $targetUser
fi

查询命令

根据机器ip(field-selector)查询pod:

#!/bin/bash
export fieldKEY="status.podIP"
export fieldVALUE="6.0.90.240"#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl get pod --all-namespaces --field-selector=$fieldKEY=$fieldVALUE -o wide

根据label查询pod:

#!/bin/bash
export labelKEY="sigma.ali/ip"
export labelVALUE="6.0.90.240"#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl get pod --all-namespaces -l $labelKEY=$labelVALUE -o wide

导出yaml

根据机器ip使用kubectl导出机器yaml:

#!/bin/bash
local podName=""
local namespace=""#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl get pod/$podName -n ${namespace} -oyaml

describe

根据namespace和podName进行describe

local namespace="longtermbase"
local podName="inplaceset-antcodebuild-tn1oimjfl-gz00b-0"#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl describe pod $podName -n $namespace

清理terminating的pod

通过清理finalizers实现

local namespace=""
local podName=""#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl patch pod/$podName -n $namespace -p '{"metadata":{"finalizers":null}}'

强制删除

local namespace=""
local podName=""#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'k delete pod/$podName -n $namespace --force --grace-period=0

复制文件到pod容器

local namespace=""
local podName=""
local sourceDir=""
local sourceFile=""
local targetDir=""
local targetFile=""#alias kubectl='kubectl'
alias kubectl='kubectl --kubeconfig=/Users/king/.kube/sa128.config'kubectl cp -n linkw $sourceDir/$sourceFile $podName:/targetDir/targetFile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】18 上传文件到数据库(Thymeleaf + MySQL)

Git仓库 https://gitee.com/Lin_DH/system 介绍 使用 Thymeleaf 写的页面&#xff0c;将&#xff08;txt、jpg、png&#xff09;格式文件上传到 MySQL 数据库中。 依赖 pom.xml <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><depende…

Kubernetes实现故障转移和微服务弹性伸缩

以下是在Kubernetes&#xff08;k8s&#xff09;中实现故障转移和高可用的方法及详细操作步骤&#xff1a; 一、通过Kubernetes Deployment实现故障转移&#xff08;多实例部署&#xff09; 方法概述&#xff1a; 通过创建Deployment资源并设置多个副本&#xff0c;Kubernete…

Sharding运行模式、元数据、持久化详解

运行模式 单机模式 能够将数据源和规则等元数据信息持久化&#xff0c;但无法将元数据同步至多个Sharding实例&#xff0c;无法在集群环境中相互感知。 通过某一实例更新元数据之后&#xff0c;会导致其他实例由于获取不到最新的元数据而产生不一致的错误。 适用于工程师在本…

Go语言进阶之Context控制并发

Context Context是Go语言中一个用于传递请求范围的上下文信息的标准库包&#xff0c;其主要用于处理并发操作中请求的生命周期的管理。 协程如何退出 利用协程退出的例子来说明Context的作用&#xff0c;以及没有使用Context&#xff0c;应该如何在没有执行完代码时提前退出…

挖掘web程序中的OAuth漏洞:利用redirect_uri和state参数接管账户

本文探讨了攻击者如何利用OAuth漏洞&#xff0c;重点是滥用redirect_uri和state参数以接管用户账户。如果redirect_uri参数验证不严&#xff0c;可能会导致未经授权的重定向到恶意服务器&#xff0c;从而使攻击者能够捕获敏感信息。同样&#xff0c;state参数的错误实现可能使O…

数据中心类DataCenter(二)

数据中心类DataCenter&#xff08;二&#xff09; 前言 在上一集我们对数据中心类DataCenter做了以下内容&#xff0c;我们对他进行设置单例模式&#xff0c;我们讨论并写入了一些我们数据中心类需要管理的数据&#xff0c;重点介绍了我们验证码id的重要性&#xff0c;在最后…

ORACLE 闪回技术简介

闪回技术是若干技术的集合 包含对数据库整体的闪回 对表的闪回 对事务的闪回 经典面试题面试题&#xff1a;简述Oracle数据库闪回技术&#xff1f; 1.闪回Oracle数据库 2.闪回表 3.闪回事务 数据库闪回 要想实现数据库闪回 1.必须配置数据库的恢复区 SQL> show parameter …

Python世界:力扣题解1712,将数组分成三个子数组的方案数,中等

Python世界&#xff1a;力扣题解1712&#xff1a;将数组分成三个子数组的方案数&#xff0c;中等 任务背景思路分析代码实现测试套件本文小结 任务背景 问题来自力扣题目1712. Ways to Split Array Into Three Subarrays&#xff0c;大意如下&#xff1a; A split of an intege…

Java集合框架之映射(Map)

引言 在Java编程中&#xff0c;管理键值对数据是一项常见的任务。Java集合框架中的Map接口为此提供了强大的支持。Map接口允许我们存储键值对&#xff0c;并提供了丰富的方法来操作这些键值对。本文将详细介绍Map接口的内部机制、特性、操作方法以及在实际编程中的应用场景。 …

Java集合基础——针对实习面试

目录 Java集合基础什么是Java集合&#xff1f;说说List,Set,Queue,Map的区别&#xff1f;说说List?说说Set?说说Map&#xff1f;说说Queue?为什么要用集合&#xff1f;如何选用集合&#xff1f; Java集合基础 什么是Java集合&#xff1f; Java集合&#xff08;Java Collect…

基于单片机的客车载客状况自动检测系统(论文+源码)

1系统整体设计 本课题为客车载客状况自动检测系统&#xff0c;在此以STM32单片机为核心控制器&#xff0c;结合压力传感器、红外传感器、蜂鸣器、语音提示模块、继电器、液晶等构成整个客车载客状况自动检测系统&#xff0c;整个系统架构如图2.1所示&#xff0c;在此通过两个红…

卷积核参数详细介绍

卷积核参数详细介绍如下&#xff1a; 2. 尺寸&#xff1a;卷积核通常是一个小矩阵&#xff0c;如3x3、5x5等&#xff0c;定义了卷积的大小范围&#xff0c;在网络中代表感受野的大小。 3. 权重&#xff1a;卷积核中的每个元素都有一个权重值&#xff0c;用于捕捉输入数据的特征…

第 3 章 -GO语言 基本语法

1. 注释 在编程中&#xff0c;注释是帮助理解代码的重要工具。Go语言支持两种类型的注释&#xff1a; 单行注释&#xff1a;以 // 开头&#xff0c;直到行尾都是注释。多行注释&#xff1a;以 /* 开始&#xff0c;以 */ 结束&#xff0c;可以跨越多行。 示例 package maini…

渗透测试(socket,namp,scapy)

socket:可以用来实现不同虚拟机或者不同计算机之间的通信。 socket常用函数&#xff1a; sock.bind(host,port) //host可接受client范围&#xff0c;以及连接的端口 sock.listen()//sever开启监听连接 sock.accpet()//返回 sock&#xff0c;addr 用来接受和发送数据 addr…

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…

内网对抗-信息收集篇SPN扫描DC定位角色区域定性服务探针安全防护凭据获取

知识点&#xff1a; 1、信息收集篇-网络架构-出网&角色&服务&成员 2、信息收集篇-安全防护-杀毒&防火墙&流量监控 3、信息收集篇-密码凭据-系统&工具&网站&网络域渗透的信息收集&#xff1a; 在攻防演练中&#xff0c;当完成边界突破后进入内…

OpenWebUI,RAG+外部知识库+AI写文的开源应用

引言 自从去年AI火起来之后&#xff0c;很多人便热衷于寻找适合自用的AI开源项目&#xff0c;把各家大模型API接入到自己的AI程序里&#xff0c;便可以通过AI辅助完成一系列日常任务&#xff0c;比如内容翻译/润色/总结/撰写、格式转换、数据分类、代码分析、角色扮演等等。 …

qt QErrorMessage详解

1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框&#xff0c;用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中&#xff0c;当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…

洛谷 P1622 释放囚犯(区间dp)

题目链接 https://www.luogu.com.cn/problem/P1622 思路 d p [ i ] [ j ] dp[i][j] dp[i][j]表示释放区间 [ i , j ] [i,j] [i,j]的罪犯所需的最小的肉&#xff0c;状态转移方程为&#xff1a; d p [ i ] [ j ] m i n ( d p [ i ] [ j ] , d p [ i ] [ k − 1 ] d p [ k 1…

一文了解Android的Doze模式

Android 的 Doze 模式是一项省电功能&#xff0c;主要用于减少设备的功耗&#xff0c;特别是在屏幕关闭且设备长时间未被使用的情况下。Doze 模式在 Android 6.0&#xff08;API Level 23&#xff09;首次引入&#xff0c;并在后续版本中不断改进&#xff0c;以便更智能地管理后…