API исправления развертывания Kubernetes не удаляет старые наборы реплик - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Kubernets API v1.9 для исправления моих развертываний, но после исправления старый репликационный набор не удаляется, и я не вижу «OldReplicaSets» с использованием kubectl description deploy xxx. Я не могу откатиться и на старые версии.

Информация о кластере

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

Kubectl Версия: Версия клиента: version.Info {Major: "1", Minor: "9", GitVersion: "v1.9.1", GitCommit: "3a1c9449a956b6026f075fa3134ff92f7d55f812", GitTreeState: "clean", BuildDate: "2018-01-04T11: 528-01-04T11: 52: 01 23Z ", GoVersion:" go1.9.2 ", компилятор:" gc ", платформа:" linux / amd64 "} Версия сервера: version.Info {Major: "1", Minor: "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 / документы / ссылки / генерироваться / kubernetes-апи / v1.9 / # патч-22

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 api.

  • Почему я не использую замену API?

Потому что я узнал, что у kubernetes есть функция RollingUpdate, и я не хочу, чтобы мое приложение закрывалось во время обновления. Я знаю, что мог бы использовать kubectl set image, чтобы изменить свою версию, но я также хочу изменить метку. Насколько я знаю, я должен использовать kubectl patch deployments / devops-front ... для внесения изменений. Проблема здесь в том, что kubectl patch не равен api rest patch.

  • Почему я не использую kubectl?

Потому что иногда у меня не установлен kubectl. Например, я хочу пропатчить свое приложение в коде Java, я мог бы просто получить токен из конечной точки токена и вызвать Kubernetes API или использовать Fabric8io lib). Другой пример - я хочу исправить свое приложение в Jenkins Pipeline.

  • Почему бы мне не использовать v1.10 из kubernetes?

Я установил ICP V2.1.0.3, который основан на K8s v1.10, такая же проблема возникает. ReplicaSet не удаляется автоматически, когда я вызываю patch api.

...