Kubernetes部署补丁程序API不会删除旧的副本集

时间:2018-09-11 10:09:59

标签: kubernetes ibm-cloud-private kubernetes-deployment

我正在使用Kubernets API v1.9来修补我的部署,但是在补丁之后,旧的副本集没有被删除,并且我看不到使用kubectl描述deploy xxx的“ OldReplicaSets”。我也无法回滚到旧版本。

集群信息

  • IBM ICP v2.1.0.2,Kubernetes V1.9
  • IBM ICP v2.1.0.3,Kubernetes V1.10

Kubectl版本: 客户端版本:version.Info {主要:“ 1”,次要:“ 9”,GitVersion:“ v1.9.1”,GitCommit:“ 3a1c9449a956b6026f075fa3134ff92f7d55f812”,GitTreeState:“ clean”,BuildDate:“ 2018-01-04T11:52: 23Z“,GoVersion:” go1.9.2“,编译器:” gc“,平台:” linux / amd64“} 服务器版本:version.Info {主要:“ 1”,次要:“ 9”,GitVersion:“ v1.9.1 + icp-ee”,GitCommit:“ d97ba3f083461e0ae0a8881550e83350af4c8f57”,GitTreeState:“ clean”,BuildDate:“ 2018-02- 23T07:20:41Z“,GoVersion:” go1.9.2“,编译器:” gc“,平台:” linux / amd64“}

API地址: https://v1-9.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/#patch-22

我用Postman进行的API调用:

PATCH /apis/apps/v1beta1/namespaces/default/deployments/devops-front HTTP/1.1
Host: ****:8001
Content-Type: application/strategic-merge-patch+json
Cache-Control: no-cache
Postman-Token: 46052a2c-2f3b-48a0-83b9-c70aeb2e5dda

{
    "metadata": {
        "labels": {
            "version":"v1.0.7"
        }
    },
    "spec": {
        "template": {
            "spec": {
                "containers": [{
                    "name": "devops-front",
                    "image": "mycluster.icp:8500/default/devops/devops-front:v1.0.7"
                }]
            },
            "metadata": {
                "labels": {
                    "version": "v1.0.7"
                }
            }
        }
    }
}

请求后的部署信息:

Name:                   devops-front
Namespace:              default
CreationTimestamp:      Tue, 28 Aug 2018 10:07:52 +0800
Labels:                 run=devops-front
                        version=v1.0.0
Annotations:            deployment.kubernetes.io/revision=1
Selector:               run=devops-front,version=v1.0.7
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=devops-front
           version=v1.0.7
  Containers:
   devops-front:
    Image:        mycluster.icp:8500/default/devops/devops-front:v1.0.7
    Ports:        80/TCP, 443/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   devops-front-655c4969b4 (3/3 replicas created)
Events:          <none>

我在这里提供更多详细信息

我的Yaml文件:图像的版本标签和标签会通过代码自动完善。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: devops-front
spec:
  replicas: 3
  strategy: 
    type: RollingUpdate
  template:
    metadata:
      labels:
        run: devops-front
        version: v1.0.7
    spec:
      containers:
      - name: devops-front
        image: mycluster.icp:8500/default/devops/devops-front:v1.0.7
        ports:
        - containerPort: 80
        - containerPort: 443  
        imagePullPolicy: Always

当我使用HTTP PATCH API更新部署时,会得到两个ReplicaSet:

NAME                                DESIRED   CURRENT   READY     AGE
devops-front-5c4b55bf96             3         3         3         6h
devops-front-c98d99cf6              3         3         3         2d

这两个副本集仅在版本标签和映像版本上有所不同。如我所述,旧的ReplicaSet并未按预期删除,调用补丁程序api后也看不到滚动更新过程。

  • 我为什么不使用replace api?

因为我了解到kubernetes具有RollingUpdate功能,并且我不想在更新期间关闭我的应用程序。我知道我可以使用kubectl设置图像来更改我的版本,但是我也想更改标签。据我所知,我应该使用kubectl补丁部署/ devops-front ...进行更改。这里的问题是kubectl补丁与补丁rest api不相等。

  • 我为什么不使用kubectl?

因为有时我没有安装kubectl。例如,我想用Java代码修补我的应用程序,我可以简单地从令牌端点获取令牌并调用Kubernetes API或使用Fabric8io lib)。另一个例子是我想在Jenkins Pipeline中修补我的应用程序。

  • 为什么我不使用Kubernetes v1.10?

我已经安装了基于K8s v1.10的ICP V2.1.0.3,也会发生相同的问题。调用修补程序api时,不会自动删除ReplicaSet。

0 个答案:

没有答案