如何直接将YAML内容传入kubectl patch?求正确命令格式
如何不创建文件,以可读格式动态传入kubectl patch补丁数据?
你可以通过以下两种方式实现不创建文件、同时保持补丁格式可读性的kubectl patch操作:
方法1:使用-p -从标准输入读取补丁内容(推荐)
直接通过here-doc将JSON或YAML格式的补丁内容传递给kubectl,命令如下:
JSON格式示例
kubectl patch storageclass local-path --type=merge -p - << 'EOF' { "metadata": { "annotations": { "storageclass.kubernetes.io/is-default-class": "false" } } } EOF
YAML格式示例
kubectl patch storageclass local-path --type=merge -p - << 'EOF' metadata: annotations: storageclass.kubernetes.io/is-default-class: false EOF
说明:-p -中的第二个-表示让kubectl从标准输入读取补丁数据,here-doc的'EOF'可以避免bash对内容中的变量或特殊字符进行解析。
方法2:使用--patch-file /dev/stdin读取标准输入
如果你的kubectl版本不支持-p -的写法,可以直接指定标准输入设备文件/dev/stdin:
cat << 'EOF' | kubectl patch storageclass local-path --type=merge --patch-file /dev/stdin metadata: annotations: storageclass.kubernetes.io/is-default-class: false EOF
之前错误的原因解析
- 使用
--patch-file -报错:部分旧版本kubectl不支持用-指代标准输入,替换为/dev/stdin即可解决。 - JSON解析错误:你之前的示例中使用了HTML转义的
",实际应该使用原生双引号",否则kubectl无法正确解析JSON格式。 -p << 'EOF'报错:-p参数需要明确指定输入来源,必须加上-来表示从标准输入读取,否则bash会认为-p缺少参数。
内容的提问来源于stack exchange,提问作者Floren
相关产品推荐
相关产品推荐

