You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python快速将kubectl节点输出转为节点IP字典

提取Kubectl节点输出为IP映射字典的高效方法

方法一:用Kubectl内置格式化(最推荐)

不用额外处理文本,直接让kubectl输出目标格式,效率最高:

1. 输出纯键值对

执行命令直接拿到节点名和对应IP:

kubectl get nodes -o custom-columns=NAME:.metadata.name,INTERNAL-IP:.status.addresses[?(@.type=="InternalIP")].address --no-headers

输出示例:

cp-node-1   xxx
cp-node-2   yyy
cp-node-3   zzz

2. 直接生成Python字典格式

结合jsonpath快速生成可复用的字典结构:

kubectl get nodes -o jsonpath='{range .items[*]}"{.metadata.name}": "{.status.addresses[?(@.type=="InternalIP")].address}",{"\n"}'

把输出稍作整理(去掉最后一个逗号)就能直接作为Python字典使用,或者用一行Python转换:

node_ip = dict(line.split(maxsplit=1) for line in '''cp-node-1   xxx
cp-node-2   yyy
cp-node-3   zzz'''.splitlines() if line.strip())

方法二:正则表达式处理原始文本

如果已经拿到了原始的命令输出文本,用正则快速提取:

import re

raw_output = '''  NAME                                       STATUS   ROLES           AGE   VERSION   INTERNAL-IP        
 cp-node-1                                   Ready    control-plane   xxx   xxx       xxx     
 cp-node-2                                   Ready    control-plane   xxx   xxx       yyy   
 cp-node-3                                   Ready    control-plane   xxx   xxx       zzz   '''

# 匹配每行的节点名和内部IP,跳过表头
pattern = re.compile(r'\s*(\S+)\s+\S+\s+\S+\s+\S+\s+\S+\s+(\S+)')
node_ip = {}
for line in raw_output.splitlines():
    match = pattern.match(line)
    if match and not line.strip().startswith('NAME'):
        node_name, ip = match.groups()
        node_ip[node_name] = ip

# 调用示例
print(node_ip['cp-node-1'])  # 输出 xxx

正则逻辑:跳过开头空白,捕获第一个非空白串(节点名),跳过中间无关字段,最后捕获内部IP。

内容的提问来源于stack exchange,提问作者Lakshmi Narayanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:33:29