Пока я изучал Kubernetes и Terraform, я создавал пример микросервисов Node.js.
Пока все идет хорошо, и с помощью нескольких команд я могу подготовить кластер Kubernetes иразверните на нем несколько микросервисов Node.js.
Полный пример доступен на GitHub: https://github.com/ashleydavis/nodejs-microservices-example
Вы можете увидеть полную настройку кластера и модулей в этом файле:https://github.com/ashleydavis/nodejs-microservices-example/blob/master/scripts/infrastructure/kubernetes/kubernetes.tf
Например, один из модулей определен следующим образом:
resource "kubernetes_pod" "web" {
metadata {
name = "nodejs-micro-example-web"
labels {
name = "nodejs-micro-example-web"
}
}
spec {
container {
image = "${var.docker_registry_name}.azurecr.io/web:${var.version}"
name = "nodejs-micro-example-web"
}
}
}
Все отлично работает при первоначальном развертывании, но я не могу заставить систему обновитькогда я изменяю код и создаю новые версии образов Docker.
Когда я делаю это, я обновляю переменную «version», которую вы можете видеть в предыдущем фрагменте кода.
Когда явпоследствии запустив terraform apply
, я получаю следующую ошибку, говорящую о том, что модуль уже существует:
kubernetes_pod.web: pods "nodejs-micro-example-web" already exists
Поэтому мой вопрос заключается в том, как использовать Kubernetes и Terraform для развертывания обновлений кода (то есть обновлениеed Docker images) и новые модули будут развернуты в кластере?(и в то же время очистить старые капсулы).