4

我目前有一个 GKE Kubernetes 1.15 集群,我计划升级到 1.16。由于 1.16 不支持某些 API,我必须将我的部署从 extensions/v1beta1 更改为 apps/v1。

使用这个简单的 deployment.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

当我将它应用到我的 1.15 cluster:kubectl -n mynamespace deployment.yml时,实际看到的是以下(kubectl -n mynamespace get deployments nginx-deployment):

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
    kubectl.kubernetes.io/last-applied-configuration: |
...

如您所见,实际的 apiVersion 是 extensions/v1beta1 而不是 apps/v1。为什么不应用我指定的版本?

更新:

这是我的 kubectl 版本:

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T23:41:24Z", GoVersion:"go1.14", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"15+", GitVersion:"v1.15.9-gke.24", GitCommit:"39e41a8d6b7221b901a95d3af358dea6994b4a40", GitTreeState:"clean", BuildDate:"2020-02-29T01:24:35Z", GoVersion:"go1.12.12b4", Compiler:"gc", Platform:"linux/amd64"}
4

2 回答 2

4

返回的 apiVersionkubectl get不一定与您当前配置的实际 apiVersion 匹配。

见这里:https ://github.com/kubernetes/kubernetes/issues/62283#issuecomment-380968868

引用:

kubectl get使用服务器优先顺序,这将优先使用extensionsAPI 组以实现向后兼容性,直到extensions被删除。也就是说,kubectl get deployment默认使用extensions/v1beta1端点。

要获取appsAPI 组下的部署,您可以使用kubectl get deployment.apps,它会返回您的apps/v1部署。

于 2020-04-04T21:20:26.497 回答
1

幸运的是 kubectl,CLI 瑞士刀有一个工具可以帮助进行这种转换。如果您有任何抛出此错误的旧清单,请将其添加kubectl convert到管道中,它应该可以在 Kubernetes 1.16 中正常工作。

请看这里:apiversions-update

kubectl convert命令已更改 API 版本以兼容 k8s 1.16。您只需要确保使用最新版本的 kubectl 即可将convert选项内置到其中。

于 2020-03-26T16:17:09.740 回答