Автономное 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