Kubectl apply 命令用于更新现有服务资源
Kubectl apply command for updating existing service resource
目前我使用的是 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: Invalid value: "": field is immutable
- metadata.resourceVersion: Invalid value: "": must be specified for an update
所以我想知道这是否是服务资源的预期行为?
这是我的服务的 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
您需要在您的服务 yaml 文件中设置 spec.clusterIP,并将其值替换为服务中的 clusterIP 地址,如下所示:
spec:
clusterIP:
您的问题在下面的 github 中讨论,还有一个解决方法可以帮助您绕过这个问题。
手动 运行ning kubectl apply -f somefile.yaml
时有时会遇到此错误。
我认为当有人通过 Kubernetes 仪表板更改规范而不是通过 kubectl apply
.
应用新更改时会发生这种情况
为了修复它,我 运行 kubectl edit services/servicename
在我的默认编辑器中打开了 yaml 规范。然后删除字段 metadata.resourceVersion
和 spec.clusterIP
,点击保存并再次 运行 kubectl apply -f somefile.yaml
。
目前我使用的是 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: Invalid value: "": field is immutable
- metadata.resourceVersion: Invalid value: "": must be specified for an update
所以我想知道这是否是服务资源的预期行为?
这是我的服务的 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
您需要在您的服务 yaml 文件中设置 spec.clusterIP,并将其值替换为服务中的 clusterIP 地址,如下所示:
spec:
clusterIP:
您的问题在下面的 github 中讨论,还有一个解决方法可以帮助您绕过这个问题。
手动 运行ning kubectl apply -f somefile.yaml
时有时会遇到此错误。
我认为当有人通过 Kubernetes 仪表板更改规范而不是通过 kubectl apply
.
为了修复它,我 运行 kubectl edit services/servicename
在我的默认编辑器中打开了 yaml 规范。然后删除字段 metadata.resourceVersion
和 spec.clusterIP
,点击保存并再次 运行 kubectl apply -f somefile.yaml
。