kubernetes-client/java:Scale报错400 BadRequest 或 500 cannot unmarshal object

简介: kubernetes-client/java:Scale报错400 BadRequest 或 500 cannot unmarshal object

问题现象

使用kubernetes-client/java 对 Deployment、ReplicaSet或者StatefulSet 进行Scale(手动扩缩容),修改实例数


客户端版本

<!--k8s-->
<dependency>
    <groupId>io.kubernetes</groupId>
    <artifactId>client-java</artifactId>
    <version>6.0.1</version>
    <!--<scope>compile</scope>-->
</dependency>


操作实例 StatefulSet

@Test
    public void AppsV1ApiTest(){
        AppsV1Api apiInstance = new AppsV1Api();
        String jsonPatchStr = "{\"op\":\"replace\",\"path\":\"/spec/replicas\", \"value\": " + 2 + " }";
        V1Patch patch = new V1Patch(jsonPatchStr);
        try {
            apiInstance.patchNamespacedStatefulSet("资源名称", "分区名称", patch, "false", null, null, null);
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }


报错信息

{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"json: cannot unmarshal object into Go value of type jsonpatch.Patch","code":500}


操作实例 Deployment

@Test
    public void ExtensionsApiTest(){
        ExtensionsV1beta1Api apiInstance = new ExtensionsV1beta1Api();
        String jsonPatchStr = "{\"op\":\"replace\",\"path\":\"/spec/replicas\", \"value\": " + 2 + " }";
        V1Patch patch = new V1Patch(jsonPatchStr);
        try {
            ApiResponse<ExtensionsV1beta1Scale> apiResponse = apiInstance.
                    patchNamespacedDeploymentScaleWithHttpInfo("资源名称",
                            "分区名称", patch, "false", null, null, null);
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }


报错信息


问题分析:

使用jsonpatch 更新或修改一个资源对象时,需要是数组形式,不能是一个对象


问题解决:

new V1Patch(jsonPatchStr)的内容,改为数组格式

String jsonPatchStr = "[{\"op\":\"replace\",\"path\":\"/spec/replicas\", \"value\": " + 2 + " }]";


JSON Patch讲解

原始内容

{
  "baz": "qux",
  "foo": "bar"
}


通过JSONPath操作

[
  { "op": "replace", "path": "/baz", "value": "boo" },
  { "op": "add", "path": "/hello", "value": ["world"] },
  { "op": "remove", "path": "/foo" }
]


输出结果

{
  "baz": "boo",
  "hello": ["world"]
}

测试JSONPath还支持


Copy(复制

{ "op": "copy", "from": "/biscuits/0", "path": "/best_biscuit" }

将值从JSON文档中的一个位置复制到另一个位置。这两个frompath是JSON指针。


Move(移动

{ "op": "move", "from": "/biscuits", "path": "/cookies" }

将值从一个位置移动到另一位置。这两个frompath是JSON指针。


Test(测试

{ "op": "test", "path": "/best_biscuit/name", "value": "Choco Leibniz" }

测试是否在文档中设置了指定的值。如果测试失败,则整个补丁都不适用。

参考链接:

 



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
11天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
113 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
137 4
|
2月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2月前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
183 1
|
3月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
123 20
|
3月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
99 3
|
4月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
54 5
|
4月前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
42 3

热门文章

最新文章