当前,我正在使用Kubernetes 1.11。+版本。以前,我一直在 cloud build 脚本中使用以下命令:
- name: 'gcr.io/cloud-builders/kubectl'
id: 'deploy'
args:
- 'apply'
- '-f'
- 'k8s'
- '--recursive'
env:
- 'CLOUDSDK_COMPUTE_ZONE=${_REGION}'
- 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER_NAME}'
并且这些命令正按预期运行,当时我使用的是k8s 1.10。+。但是最近我遇到了以下错误:
- spec.clusterIP:无效值:“”:字段是不可变的
- metadata.resourceVersion:无效值:“”:必须指定更新
所以我想知道这是否是Service资源的预期行为?
这是我为我的服务配置的YAML:
apiVersion: v1
kind: Service
metadata:
name: {name}
namespace: {namespace}
annotations:
beta.cloud.google.com/backend-config: '{"default": "{backend-config-name}"}'
spec:
ports:
- port: {port-num}
targetPort: {port-num}
selector:
app: {label}
environment: {env}
type: NodePort
答案 0 :(得分:1)
答案 1 :(得分:0)
您需要在服务yaml文件上设置spec.clusterIP,并将其值替换为服务中的clusterIP地址,如下所示:
spec:
clusterIP:
下面的github讨论了您的问题,并提供了一种解决方法来帮助您绕过此问题。
答案 2 :(得分:0)
有时我在手动运行kubectl apply -f somefile.yaml
时遇到此错误。
我认为,当有人通过Kubernetes仪表板更改了规范而不是通过kubectl apply
进行新更改时,就会发生这种情况。
要解决此问题,我运行kubectl edit services/servicename
,它将在默认编辑器中打开yaml规范。然后删除字段metadata.resourceVersion
和spec.clusterIP
,点击保存并再次运行kubectl apply -f somefile.yaml
。