【发布时间】:2018-08-24 23:59:14
【问题描述】:
我使用 io.fabric8.kubernetes-client, version 3.1.8 来做 kubernetes 资源的 RollingUpdate。部署很好。但是我遇到了 StatefulSet 的例外。但如果我对 StatefulSet 使用 'kubectl apply -f ***.yaml' 也没问题。
RollingUpdate 部署代码:
public void createOrReplaceResourceByYaml(String namespace, KubernetesResource resource) {
KubernetesClient client = k8sRestClient.newKubeClient();
Deployment deployment = (Deployment) resource;
logger.info(String.format("Create/Replace Deployment [%s] in namespace [%s].", ((Deployment) resource).getMetadata().getName(), namespace));
NonNamespaceOperation<Deployment, DeploymentList, DoneableDeployment, ScalableResource<Deployment, DoneableDeployment>> deployments = client.extensions().deployments().inNamespace(namespace);
Deployment result = deployments.createOrReplace(deployment);
logger.info(String.format("Created/Replaced Deployment [%s].", result.getMetadata().getName()));
}
RollingUpdate StatefulSet 的代码
public void createOrReplaceResourceByYaml(String namespace, KubernetesResource resource) {
KubernetesClient client = k8sRestClient.newKubeClient();
StatefulSet statefulSet = (StatefulSet) resource;
logger.info(String.format("Create/Replace StatefulSet [%s] in namespace [%s].", statefulSet.getMetadata().getName(), namespace));
NonNamespaceOperation<StatefulSet, StatefulSetList, DoneableStatefulSet, RollableScalableResource<StatefulSet, DoneableStatefulSet>> statefulSets = client.apps().statefulSets().inNamespace(namespace);
StatefulSet result = statefulSets.createOrReplace(statefulSet);
logger.info(String.format("Created/Replaced StatefulSet [%s].", result.getMetadata().getName()));
}
StatefulSet 的 RollingUpdate 异常
执行失败:PUT 在:https://kubernetes.default.svc/apis/apps/v1beta1/namespaces/itsma1/statefulsets/pro-rabbitmq。消息:StatefulSet.apps“pro-rabbitmq”无效:规范:禁止:禁止对“副本”、“模板”和“更新策略”以外的字段更新状态集规范。收到状态:状态(apiVersion=v1, code=422, details=StatusDetails(causes=[StatusCause(field=spec, message=Forbidden: 禁止对'replicas'、'template'和'updateStrategy'以外的字段的statefulset规范进行更新。原因=FieldValueForbidden、additionalProperties ={})], group=apps, kind=StatefulSet, name=pro-rabbitmq, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=StatefulSet.apps "pro-rabbitmq" 无效:规范:禁止:禁止对“副本”、“模板”和“更新策略”以外的字段的状态集规范进行更新。元数据=ListMeta(resourceVersion=null, selfLink=null, additionalProperties={}), reason=Invalid , status=Failure, additionalProperties={})。
我很好奇为什么会发生错误以及如何解决它。
【问题讨论】:
标签: java kubernetes fabric8