#google-cloud-platform #terraform #google-kubernetes-engine
#google-облачная платформа #терраформирование #google-kubernetes-engine
Вопрос:
У меня есть кластер GKE и постоянный диск Google Compute Engine, созданный terraform. Этот диск используется для создания постоянного тома kubernetes, который затем запрашивается и монтируется в контейнер в модуле.
Что я хочу сделать, так это сохранить некоторые файлы и папки на этом постоянном диске, чтобы при его монтировании мой контейнер мог получить доступ к этим файлам и папкам. Я попытался провести исследование, и, похоже, способ сделать это — подключить диск к вычислительному механизму или даже к контейнеру, затем скопировать и вставить из локального в него.
Есть ли лучший способ? Предпочтительно с использованием terraform.
Вот как определяются эти ресурсы.
resource "google_compute_disk" "app" {
name = "app-${var.project_id}"
type = "pd-standard"
zone = var.zone
size = var.volume_size_gb
labels = {
environment = var.environment
}
}
resource "kubernetes_persistent_volume" "app" {
metadata {
name = "app-${var.project_id}"
}
spec {
access_modes = ["ReadWriteOnce"]
capacity = {
storage = "${var.volume_size_gb}Gi"
}
persistent_volume_source {
gce_persistent_disk {
pd_name = google_compute_disk.app.name
fs_type = "ext4"
}
}
storage_class_name = "standard"
}
}
resource "kubernetes_persistent_volume_claim" "app" {
metadata {
name = "app-${var.project_id}"
}
spec {
access_modes = ["ReadWriteOnce"]
resources {
requests = {
storage = "${var.volume_size_gb}Gi"
}
}
volume_name = kubernetes_persistent_volume.app.metadata.0.name
storage_class_name = "standard"
}
}
resource "kubernetes_deployment" "core_app" {
metadata {
name = "core-app"
labels = {
app = "core"
}
}
spec {
replicas = 1
selector {
match_labels = {
app = "core"
}
}
template {
metadata {
labels = {
app = "core"
}
}
spec {
volume {
name = "app-volume"
persistent_volume_claim {
claim_name = kubernetes_persistent_volume_claim.app.metadata.0.name
}
}
container {
name = "core-app"
image = "core-image:latest"
port {
container_port = 8080
}
volume_mount {
mount_path = "/mnt/extra-addons"
name = "app-volume"
sub_path = "addons"
}
readiness_probe {
tcp_socket {
port = "8069"
}
initial_delay_seconds = 5
period_seconds = 10
}
image_pull_policy = "Always"
}
}
}
}
}
Ответ №1:
Способ правильный. Если вы хотите инициализировать диск:
- Вы можете начать с чистого диска, а затем записать на него свои данные, подключив их к вычислительному движку
- Вы можете создать диск из моментального снимка или образа, в котором данные уже были сохранены ранее
Теперь о Terraform, у меня есть мнение, а теперь реальный ответ для вас. Terraform — это инструмент IaC: инфраструктура как код. Это означает: выделенный для инфраструктуры.
В вашем случае вы хотите выполнить «развертывание программного обеспечения». Ресурсы K8S, которые вы развертываете, а также подготовка и монтирование диска и так далее. IMO, Terraform — неподходящий инструмент для этого. У вас есть другие инструменты, такие как Ansible, которые больше подходят для управления программным обеспечением / ОС.
Примечание: я уверен, что с помощью Terraform 0.13 или 0.14 вы можете создать сценарий, который вы можете выполнить и достичь желаемого, но я думаю, что это неправильный путь.