Автономное постоянное монтирование диска 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 Cloud Provider» для этот вопрос, проблема с подключением диска все еще не устранена.

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

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

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


person Pavel    schedule 27.05.2017    source источник


Ответы (1)


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

В моем облачном конфиге есть что-то вроде этого:

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
person Wouter Lagerweij    schedule 07.07.2017
comment
Это полезный пример для gsutil rsync, спасибо. Однако моя конкретная проблема - монтировать постоянный диск GCE. - person Pavel; 21.07.2017