Автономное kubelet постоянное монтирование диска в экземпляре Google Cloud

У меня есть процесс, который нужно запускать ежедневно в контейнере Docker, синхронизируя некоторые данные из хранилища на внешний том (постоянный диск Google Cloud). До сих пор мне удалось запустить этот процесс, создав кластер из одного узла.

Поскольку процесс завершается через пару часов, я хочу удалить ресурсы ВМ (за исключением, конечно, постоянного диска) после завершения. Запуск / удаление одной вычислительной виртуальной машины (без настройки кластера kubernetes) кажется более простым, поэтому я пытался запустить один кублет на экземпляре облака, оптимизированном для контейнера. Постоянное монтирование диска - вот где это не удается.

Моя команда запуска:

gcloud compute instances create cvm-name-0 \
    --image-family=cos-stable \
    --image-project=cos-cloud \
    --boot-disk-type pd-ssd \
    --boot-disk-size 10GB \
    --metadata-from-file \
    "google-container-manifest=containers.yaml,user-data=cloudinit.yaml" \
    --zone "$gzone" \
    --scopes default,storage-rw \
    --machine-type n1-highcpu-4

Содержание container.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: container-name
spec:
  containers:
    - name: container-name
      image: gcr.io/project-name/container-name
      imagePullPolicy: Always
      volumeMounts:
        - name: persistent-disk-name
          mountPath: /home/someuser/somedir
  volumes:
    - name: persistent-disk-name
      gcePersistentDisk:
        pdName: persistent-disk-name
        fsType: ext4

Содержание cloudinit.yaml:

#cloud-config
bootcmd:
- echo "KUBELET_OPTS=\"--cloud-provider=gce\"" > /etc/default/kubelet
runcmd:
- systemctl start kubelet.service

В то время как --cloud-provider=gce опция исправляет ошибку "Не удалось получить облачный провайдер GCE" в этом вопросе, все еще существует некоторая проблема с монтированием диска.

Потенциально релевантная строка из журнала ОС контейнера говорит:

EXT4-fs (dm-0): не удалось подключиться как ext3 из-за несовместимости функций

Любой способ заставить это работать на одном экземпляре вычислений (без кластера kubernetes)? Где еще я должен искать более информативные журналы ошибок?

1 ответ

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

У меня есть что-то вроде этого в моей облачной конфигурации:

users:
- name: dockerrunner
  uid: 2000
  groups: docker
write_files:
- path: /home/dockerrunner/backup-hourly.sh
  permissions: 0755
  owner: dockerrunner
  content: |
    #!/bin/sh
    export HOME=/home/dockerrunner
    export USER=root
    toolbox --bind /mnt/disks/nfs:/mnt/disks/nfs \
      /google-cloud-sdk/bin/gsutil -m \
      rsync -r /mnt/disks/nfs gs://<bucket-name>/hourly
- path: /etc/systemd/system/files-backup-hourly.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Shared Files Backup upload script - hourly

    [Service]
    Type=oneshot
    ExecStart=/bin/sh /home/dockerrunner/backup-hourly.sh

- path: /etc/systemd/system/files-backup-hourly.timer
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Run Shared Files Backup create script every hour

    [Timer]
    OnCalendar=*-*-* *:00:00

    [Install]
    WantedBy=timers.target
runcmd:
- systemctl daemon-reload
- systemctl start files-backup-hourly.service
- systemctl start files-backup-hourly.timer
Другие вопросы по тегам