Обновите кластер Kubernetes с помощью провайдера Terraform - PullRequest
0 голосов
/ 22 декабря 2018

Сценарий:

У меня есть ситуация, когда у меня нет свободы использовать любой доступный на рынке инструмент обновления Kubernetes, например KOps или KubeSpray.Итак, я вынужден использовать Terraform для предоставления экземпляров, а kubernetes устанавливается как часть начальной загрузки с использованием провайдеров.Теперь бросается в глаза: мой кластер K8s работает на версии 1.11.6, и я хочу обновить его до 1.12.3.

Что я сделал:

В скриптах terraform я удвоил количество узлов и обновил версию K8s.Затем сделал развертывание Terraform.Мне удалось обновить новые узлы (узлы образовались после удвоения количества).Пост, который я прекратил экземпляры, работающие на старой версии K8s.Теперь у меня есть только новые узлы с новой версией K8, работающей на них.Затем запустил terraform refresh, чтобы синхронизировать файл состояния с реальными ресурсами, которые существуют удаленно в AWS.

Проблема

Чтобы убедиться, что файл состояния и удаленный сервер синхронизированы, я запустил terraform plan, который показывает некоторые ресурсы, которые необходимо создать.По сути, план показывает, что он собирается снова создать новые узлы.Невозможно понять, почему так !!

Пожалуйста, кто-нибудь может уточнить, что здесь происходит не так?Заранее спасибо.

Обновление:

Моя карта версий K8s

type = "map"
default = {
        kubernetes = "1.11.5"
        etcd = "3.3.1"
        dockerCE = "18.06.1.ce-3.el7"
        cfssl = "1.2"
        kube-dns = "1.14.10"
        core-dns = "1.2.0"
        helm = "2.9.1"
        calico-node = "3.0.6"
        calico-cni = "2.0.5"
        calico-kube-controller = "2.0.4"
        nginx-ingress-controller = "0.19.0"
}

Количество моих узлов (для мастера ниже, но одинаково для всех узлов, таких как etcd, ca, рабочий и т. д.)

variable "MASTER_COUNT" {
        type = "map"
        default = {
                #bastion
                dev = "1"
                prod = "3"
        }

В плане Terraform все еще показаны ресурсы, которые необходимо создать.В основном он пытается воссоздать узлы с более старой версией K8, чего не должно быть, поскольку я уже выполнил terraform refresh, который должен синхронизировать мой локальный и удаленный.

Terraform will perform the following actions:

  + module.master.aws_instance.ec2-master[0]
      id:                                                <computed>
      ami:                                               "ami-######"
      arn:                                               <computed>
      associate_public_ip_address:                       <computed>
      availability_zone:                                 <computed>
      cpu_core_count:                                    <computed>
      cpu_threads_per_core:                              <computed>
      ebs_block_device.#:                                "2"

  + module.master.aws_instance.ec2-master[1]
      id:                                                <computed>
      ami:                                               "ami-#######"
      arn:                                               <computed>
      associate_public_ip_address:                       <computed>
      availability_zone:                                 <computed>
      cpu_core_count:                                    <computed>
      cpu_threads_per_core:                              <computed>
      ebs_block_device.#:                                "2"

  + module.master.aws_instance.ec2-master[2]
      id:                                                <computed>
      ami:                                               "ami-######"
      arn:                                               <computed>
      associate_public_ip_address:                       <computed>
      availability_zone:                                 <computed>
      cpu_core_count:                                    <computed>
      cpu_threads_per_core:                              <computed>
      ebs_block_device.#:                                "2"

  - module.master.aws_instance.ec2-master[3]

  - module.master.aws_instance.ec2-master[4]

  - module.master.aws_instance.ec2-master[5]

# some other re-creations like Auto scaling group, Load balancer changes etc

Plan: 10 to add, 1 to change, 16 to destroy.

1 Ответ

0 голосов
/ 02 января 2019

Наконец, я смог решить эту проблему, что означает, что незначительное обновление K8s прошло успешно.В ходе курса были выполнены следующие шаги:

  • Развертывание кластера K8s под управлением версии 1.11.2
  • Удвойте количество узлов, измените версию на 1.11.5 и повторно разверните
  • Новые узлы создаются с обновленной версией
  • Удаляют узлы, на которых запущена старая версия, т.е. 1.11.2
  • Выполните terraform refresh, чтобы синхронизировать файл состояния с действующей инфраструктурой, работающей в реальном мире
  • Измените количество узлов на 3 или половину.
  • Запустите terraform plan и проверьте (может потребоваться несколько прогонов обновления)
  • Запустите terraform apply, чтобы применить изменения.
  • Statefile должен быть синхронизирован с удаленным
  • Запустить план terraform, который не должен показывать какие-либо ресурсы для создания

В ближайшее время я попытаюсь обновить основную версиюи опубликовать результаты здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...