解决使用json配置文件删除k8s中namespace解析json报错的问题

news2025/1/12 18:15:56

报错提示如下:

C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary @dev.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "the object provided is unrecognized (must be of type Namespace): couldn't get version/kind; json parse error: invalid character 'ÿ' looking for beginning of value (fffe7b000d000a0020002000200020002200610070006900560065007200 ...)", "reason": "BadRequest", "code": 400 }

解决方案:

参考github的issue,考虑是json的问题,建议是重新生成

Couldn't get version/kind; json parse error: unexpected end of JSON input · Issue #14396 · openshift/origin · GitHub

那就重新生成json,再执行吧

C:\Users\jiangcheng>rm dev01.json 'rm' is not recognized as an internal or external command, operable program or batch file. C:\Users\jiangcheng>del dev01.json C:\Users\jiangcheng>ls 'ls' is not recognized as an internal or external command, operable program or batch file. C:\Users\jiangcheng>curl -k -H "Content-Type:application/json" -X PUT --data-binary "@dev0001.json" http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "the object provided is unrecognized (must be of type Namespace): couldn't get version/kind; json parse error: invalid character 'ÿ' looking for beginning of value (fffe7b000d000a0020002000200020002200610070006900560065007200 ...)", "reason": "BadRequest", "code": 400 }

如文档所示,出现了问题

invalid character 'ÿ' looking for beginning of value (fffe7b000d000a0020002000200020002200610070006900560065007200 ...)

解决这个问题,先排查json文件的编码问题,参考 powershell 将txt文件从UTF-8转换为ASCII的简单方法 _大数据知识库

解决方案如下:

C:\Users\jiangcheng> (Get-Content -Raw "./dev0001.json") -cmatch '\P{IsBasicLatin}' False C:\Users\jiangcheng> (Get-Content -Raw ./dev0001.json) -cmatch '\P{IsBasicLatin}' False C:\Users\jiangcheng> 'café' | Out-File -Encoding Ascii temp05121830.txt C:\Users\jiangcheng> cat .\temp05121830.txt caf? C:\Users\jiangcheng> (Get-Content -Raw temp05121830.txt) -cmatch '\P{IsBasicLatin}' False C:\Users\jiangcheng> Get-Content -Path "./temp05121830.txt" | Out-File -FilePath "./temp05121830.txt" -Encoding ASCII C:\Users\jiangcheng> (Get-Content -Raw temp05121830.txt) -cmatch '\P{IsBasicLatin}' C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> (Get-Content -Raw ./dev0001.json) -cmatch '\P{IsBasicLatin}' False C:\Users\jiangcheng> Get-Content -Path "./dev0001.json" | Out-File -FilePath "./dev0002.json" -Encoding ASCII C:\Users\jiangcheng> (Get-Content -Path "./dev0002.json") -cmatch '\P{IsBasicLatin}' C:\Users\jiangcheng>

再执行命令

curl -k -H "Content-Type:application/json" -X PUT --data-binary "@dev0002.json" http://127.0.0.1:8081/api/v1/namespaces/dev/finalize

结果如下,改动是有效果的

 

执行

kubectl get ns

结果如图所示,

 

结果没有什么改变,说明删除namespace不成功,返回查看可能是命令行的问题,文件名使用了字符串,而字符串不是json,即使没有报错,仍然是不生效的,所以准备改为转义字符

curl -k -H "Content-Type:application/json" -X PUT --data-binary `@dev0002.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize

执行之后,报错如下所示

C:\Users\jiangcheng>curl -k -H "Content-Type:application/json" -X PUT --data-binary `@dev0002.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "the object provided is unrecognized (must be of type Namespace): couldn't get version/kind; json parse error: invalid character '`' looking for beginning of value (6040646576303030322e6a736f6e)", "reason": "BadRequest", "code": 400 }

这次报错提示的是转义字符的问题,需要修改转义字符,指令如下

curl -k -H "Content-Type:application/json" -X PUT --data-binary @dev0002.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize

执行效果如下

C:\Users\jiangcheng>curl -k -H "Content-Type:application/json" -X PUT --data-binary @dev0002.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "Operation cannot be fulfilled on namespaces \"dev\": the object has been modified; please apply your changes to the latest version and try again", "reason": "Conflict", "details": { "name": "dev", "kind": "namespaces" }, "code": 409 }

再修改一下 json文件,修改之前

{ "apiVersion": "v1", "kind": "Namespace", "metadata": { "creationTimestamp": "2023-05-12T02:09:08Z", "labels": { "kubernetes.io/metadata.name": "dev" }, "name": "dev", "resourceVersion": "24023", "uid": "51588156-1758-4f51-a7de-f63febda769c" }, "spec": { }, "status": { "phase": "Active" } }

其中的 spec 字段是已经修改过的,现在将这个字段删除,再试试看

{ "apiVersion": "v1", "kind": "Namespace", "metadata": { "creationTimestamp": "2023-05-12T02:09:08Z", "labels": { "kubernetes.io/metadata.name": "dev" }, "name": "dev", "resourceVersion": "24023", "uid": "51588156-1758-4f51-a7de-f63febda769c" }, "status": { "phase": "Active" } }

执行之后还是报这个错

 

根据建议重新生成,并删除spec试试

{ "apiVersion": "v1", "kind": "Namespace", "metadata": { "creationTimestamp": "2023-05-12T02:09:08Z", "labels": { "kubernetes.io/metadata.name": "dev" }, "name": "dev", "resourceVersion": "62580", "uid": "51588156-1758-4f51-a7de-f63febda769c" }, "status": { "phase": "Active" } }

执行命令结果如下:

C:\Users\jiangcheng>kubectl get namespace dev -o json > dev.json C:\Users\jiangcheng>notepad dev.json C:\Users\jiangcheng>notepad dev.json C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary @dev.json http://127.0.0.1:8001/api/v1/namespaces/dev/finalize curl: (7) Failed to connect to 127.0.0.1 port 8001 after 2048 ms: Couldn't connect to server C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary @dev.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Namespace", "apiVersion": "v1", "metadata": { "name": "dev", "uid": "51588156-1758-4f51-a7de-f63febda769c", "resourceVersion": "62580", "creationTimestamp": "2023-05-12T02:09:08Z", "labels": { "kubernetes.io/metadata.name": "dev" }, "managedFields": [ { "manager": "kubectl-create", "operation": "Update", "apiVersion": "v1", "time": "2023-05-12T02:09:08Z", "fieldsType": "FieldsV1", "fieldsV1": {"f:metadata":{"f:labels":{".":{},"f:kubernetes.io/metadata.name":{}}}} } ] }, "spec": { }, "status": { "phase": "Active" } }

执行结果,ns没有被删除

 

为什么执行成功了,但是namespace仍然没有被删除呢?我判断是状态的原因,因为状态仍然是Active,所以没有被删除掉

接下来,先执行删除命令

kubectl delete namespace dev

执行结果果然是卡住了

 

这个状态卡住了半天,再执行远程强制删除的命令,结果冲突了

 

最终我决定重新生成json,并重新执行整个删除操作,先查看namespace的状态,如下

kubectl get ns

状态如图所示

 

可以看到dev是Terminating的状态,可删除,重新生成json再执行

C:\Users\jiangcheng>del dev.json C:\Users\jiangcheng> C:\Users\jiangcheng>kubectl get namespace dev -o json > dev.json C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng>notepad dev.json C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary @dev.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Namespace", "apiVersion": "v1", "metadata": { "name": "dev", "uid": "51588156-1758-4f51-a7de-f63febda769c", "resourceVersion": "66013", "creationTimestamp": "2023-05-12T02:09:08Z", "deletionTimestamp": "2023-05-12T11:20:37Z", "labels": { "kubernetes.io/metadata.name": "dev" }, "managedFields": [ { "manager": "kubectl-create", "operation": "Update", "apiVersion": "v1", "time": "2023-05-12T02:09:08Z", "fieldsType": "FieldsV1", "fieldsV1": {"f:metadata":{"f:labels":{".":{},"f:kubernetes.io/metadata.name":{}}}} } ] }, "spec": { }, "status": { "phase": "Terminating" } } C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng> C:\Users\jiangcheng>kubectl get ns NAME STATUS AGE default Active 24h ingress-nginx Active 24h kube-node-lease Active 24h kube-public Active 24h kube-system Active 24h local-path-storage Active 24h

可以看到这次删除终于成功了

 

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

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

相关文章

Unity2D骨骼动画制作之单张图片编辑

1、打开骨骼制作面板 在Sprite Editor左侧选项,选择Skinning Editor 2、 (1)骨骼制作 Preview Pose 预览模式,可以预览动作并不会真正的改变设置 Reset Pose 将角色骨骼和关节恢复到原始位置 Edit Bone 编辑骨骼,…

bert中文文本摘要代码(3)

bert中文文本摘要代码 写在最前面关于BERT使用transformers库进行微调 train.py自定义参数迭代训练验证评估更新损失绘图主函数 test.pytop_k或top_p采样sample_generate函数generate_file函数主函数 写在最前面 熟悉bert+文本摘要的下游任务微调的代码&#xff0c…

网络安全合规-数据出境安全评估

(一)数据出境安全评估的适用范围为: 数据处理者向境外提供重要数据; 关键信息基础设施运营者和处理100万人以上个人信息的数据处理者向境外提供个人信息;自上年1月1日起累计向境外提供10万人个人信息或者1万人敏感个…

浮点数在内存中的存储

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 浮点数在内存的存储 1. 前言&#…

vue3+WebRTC拉流(正确姿势)

vue3WebRTC拉流(正确姿势) 文章目录 vue3WebRTC拉流(正确姿势)缘由一、webRtc拉流是什么?1.实时通信:2.网络穿越:3.媒体处理:4.数据通道:5.使用场景: 二、使用webRtc引用…

《priority_queue的模拟实现》

本文主要介绍 文章目录 一、仿函数1.1 仿函数的定义1.2 普通仿函数1.3 需要自己实现仿函数 二、priority_queue的模拟实现 一、仿函数 1.1 仿函数的定义 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。 因此,这里需要明确两点&#xff1…

纯干货:数据库连接耗时慢原因排查

背景 最近公司的社区相关的服务需要优化,由于对业务不熟悉,只能借助监控从一些慢接口开始尝试探索慢的原因。由于社区相关的功能务是公司小程序流量入口,所以相应的服务访问量还是比较高的。针对这类高访问的项目,任何不留神的地…

中睿天下参编的《中国网信产业桔皮书-数据安全》正式发布

5月28日,2023中关村论坛中关村国际技术交易大会第七届中国网信产业前锋汇成功举办,本次会议以“全球数字经济发展与数据安全关键技术”为主题,会议由中国(中关村)网络安全与信息化产业联盟主办(以下简称联盟…

芯片的XIP与BootRom启动方式

XIP:execute in place,就地执行,即芯片内执行,指应用程序可以直接在flash闪存中取指然后译码、执行,不必再把代码读到系统RAM中,flash内执行时指Nor flash不需要初始化,可以直接在flash内执行代…

Elsevier期刊中,撰写Author Statement

Author Statement或Authorship Contribution通常指作者声明,用于声明当前学术论文中每位作者的贡献。 大部分期刊都要求作者在首次投稿的时候就添加这部分内容,也有一些仅要求在发表之前提交。作者声明指导与模板有些学术期刊会专门提供具体的作者声明模…

Vue3 mixin 自定义指令 teleport

文章目录 Vue3 mixin & 自定义指令 & teleportmixin 混入简单使用 自定义指令简单使用全局注册参数 teleport 传送门简单使用 Vue3 mixin & 自定义指令 & teleport mixin 混入 mixins 选项接受一个 mixin 对象数组。这些 mixin 对象可以像普通的实例对象一样…

【企业化架构部署】Apache网页优化

文章目录 一、Apache网页优化概述1.优化内容2.网页压缩2.1gzip概述2.2作用2.3Apache的压缩模块概述mod_gzip模块与mod_deflate模块 3.配置网页压缩功能3.1启用网页压缩功能步骤3.2具体操作步骤 4.配置网页缓存功能4.1启用网页压缩功能步骤4.2具体操作步骤 二、Apache安全优化1.…

【JVM】.class类文件是如何被加载的?

一、类加载过程 .class文件最终加载到JVM并使用整体步骤及图示如下: 每个步骤所做的事情如下: 1、加载 (1)通过一个类的全限定名来获取该类文件的二进制字节流;(读取class文件到内存中) &am…

点击这里!解锁海量数据在openGauss Developer Day 2023的高光时刻

5月26日,openGauss Developer Day 2023在此起彼伏的掌声中圆满落幕。最前沿的核心产品、最深度的专业解读、最全面的落地案例......海量数据在此次盛会上时时高光,事事精彩,尤其是在专场分论坛上,数据库领域各路精英济济一堂&…

linuxOPS基础_linux文件检索及筛选

find命令 查找文件 主要功能:当我们查找一个文件时,必须使用的一个命令。 find 搜索路径 [选项]选项选项说明-name指定要搜索文件的名称,支持*星号通配符(Shift 8)-type代表搜索的文件类型,f代表普通文件…

使用开源代码和开源软件如何选择开源许可证

常用的开源许可证 世界上的开源许可证大约有近百种,如何使用开源代码和开源软件并正确理解、遵守这些开源许可证赋予的权利和义务是个比较繁琐的问题,我们对其中主要的六种许可证GPL、BSD、MIT、Mozilla、Apache和LGPL做个简单的梳理,对比一下…

什么是企业移动化管理 (EMM)

什么是EMM或企业移动化管理 企业移动化管理 (EMM) 是组织用来保护公司拥有和员工拥有的移动设备上的敏感公司数据的一组策略和做法。Mobile Device Manager Plus 是一个全面的 EMM 解决方案,允许 IT 团队和管理员跨多个平台管理设备&#xf…

推进产业发展健全服务体系,中国信通院数字员工评测工作正式启动

数字技术与应用正在快速重塑全新的经济发展格局,创新应用人工智能、大数据、云计算等新兴技术是企业实施数字化转型的重要策略之一。 “数字员工”是数字生产力与创造力体系的核心要素,自动化、智能化的执行模式将成为企业业务运营的新常态。随着数字员…

外包实在是太坑了,划水三年,感觉人都废了

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

革命性3D打印数据处理软件 CHITUBOX Pro 1.3.0 Crack

CHITUBOX PRO登场 革命性的3D打印数据处理软件,让你发挥3D打印的无限潜力 支持多种主流CAD文件格式 除了传统的stl和obj文件,CHITUBOX Pro还支持导入各种主流的CAD文件格式,包括3ds、3mf、3dm、stp、step、wrl、x3d、sat、sab、dae、dxf、fb…