Увеличение размера диска, к которому docker может получить доступ в ОС, оптимизированной для работы с контейнерами - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь запустить простой ежедневный пакетный скрипт, который может работать несколько часов, после чего он отправит сгенерированные данные и завершит работу экземпляра. Чтобы добиться этого, я поместил в user-data следующее:

users:
  - name: cloudservice
    uid: 2000

runcmd:
  - sudo HOME=/home/root docker-credential-gcr configure-docker
  - |
    sudo HOME=/home/root docker run \
    --rm -u 2000 --name={service_name} {image_name} {command}
  - shutdown

final_message: "machine took $UPTIME seconds to start"

Я создаю экземпляр, используя скрипт python для генерации конфигурации для API, например:

def build_machine_configuration(
    compute, name: str, project: str, zone: str, image: str
) -> Dict:

    image_response = (
        compute.images()
        .getFromFamily(project="cos-cloud", family="cos-stable")
        .execute()
    )
    source_disk_image = image_response["selfLink"]

    machine_type = f"zones/{zone}/machineTypes/n1-standard-1"

    # returns the cloud init from above
    cloud_config = build_cloud_config(image)

    config = {
        "name": f"{name}",
        "machineType": machine_type,
        # Specify the boot disk and the image to use as a source.
        "disks": [
            {
                "type": "PERSISTENT",
                "boot": True,
                "autoDelete": True,
                "initializeParams": {"sourceImage": source_disk_image},
            }
        ],
        # Specify a network interface with NAT to access the public
        # internet.
        "networkInterfaces": [
            {
                "network": "global/networks/default",
                "accessConfigs": [{"type": "ONE_TO_ONE_NAT", "name": "External NAT"}],
            }
        ],
        # Allow the instance to access cloud storage and logging.
        "serviceAccounts": [
            {
                "email": "default",
                "scopes": [
                    "https://www.googleapis.com/auth/devstorage.read_write",
                    "https://www.googleapis.com/auth/logging.write",
                    "https://www.googleapis.com/auth/datastore",
                    "https://www.googleapis.com/auth/bigquery",
                ],
            }
        ],
        # Metadata is readable from the instance and allows you to
        # pass configuration from deployment scripts to instances.
        "metadata": {
            "items": [
                {
                    # Startup script is automatically executed by the
                    # instance upon startup.
                    "key": "user-data",
                    "value": cloud_config,
                },
                {"key": "google-monitoring-enabled", "value": True},
            ]
        },
    }
    return config

Однако мне не хватает места на диске в движке docker.

Есть идеи, как увеличить размер тома, доступного для docker служб?

1 Ответ

1 голос
/ 24 апреля 2020

Движок Docker использует пространство диска экземпляра. Поэтому, если в контейнере нет места, это значит, что диск экземпляра заполнен.

Первое, что вы можете попробовать сделать, - это создать экземпляр с большим диском. Документация гласит:

дисков [] .initializeParams.diskSizeGb строка (формат int64)

Указывает размер диска в базовых 2 ГБ. Размер должен быть не менее 10 ГБ. Если вы укажете sourceImage, который требуется для загрузочных дисков, по умолчанию используется размер sourceImage. Если вы не укажете sourceImage, размер диска по умолчанию составляет 500 ГБ.

Размер можно увеличить, добавив поле diskSizeGb в развертывании:

"disks": [
    {
      [...]
      "initializeParams": {
        "diskSizeGb": 50,
        [...]

Другие вы можете попробовать выполнить следующую команду в экземпляре, чтобы проверить, заполнен ли диск и какой раздел заполнен:

$ df -h

Таким же образом вы можете выполнить следующую команду, чтобы увидеть использование диска Docker Engine :

$ docker system df

Для использования этой команды API клиента и демона должно быть не менее 1,25. Используйте команду docker version на клиенте, чтобы проверить версии API вашего клиента и демона.

Если вы хотите больше информации, вы можете использовать флаг -v

$ docker system df -v
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...