Men-debug masalah node menggunakan toolbox

Anda mungkin perlu menginstal paket atau alat tambahan di OS yang Dioptimalkan untuk Container untuk tugas tertentu, seperti proses debug. Misalnya, debug masalah konektivitas node dengan menginstal tcpdump di toolbox. Meskipun Container-Optimized OS tidak memiliki pengelola paket, Anda dapat menggunakan utilitas toolbox yang telah diinstal sebelumnya untuk menginstal paket atau alat tambahan yang diperlukan. Menggunakan /usr/bin/toolbox adalah metode yang direkomendasikan untuk menginstal dan menjalankan alat proses debug satu kali.

/usr/bin/toolbox pada dasarnya menyediakan shell di lingkungan yang mirip dengan chroot Debian. Saat Anda memanggil /usr/bin/toolbox, perintah berikut akan dijalankan:

  1. docker pull dan docker create untuk menyiapkan lingkungan. Fungsi ini hanya dijalankan saat pertama kali Anda memanggil /usr/bin/toolbox.
  2. systemd-nspawn untuk menjalankan perintah yang diberikan atau (jika tidak ada perintah) menyediakan shell

toolbox memiliki beberapa properti lain yang perlu diperhatikan:

  • Memanggil toolbox setelah pemanggilan pertama tidak memerlukan daemon Docker yang berfungsi, serta tidak menimbulkan overhead jaringan/disk apa pun.
  • Lingkungan toolbox disiapkan sekali untuk setiap pengguna yang memanggilnya. Menjalankan sudo toolbox akan menyiapkannya untuk root pengguna.
  • Lingkungan toolbox dibuat di /var/lib/toolbox dan tetap ada di seluruh mulai ulang.
  • Anda dapat mengakses bagian sistem file root, seperti direktori beranda pengguna, dari dalam lingkungan toolbox.

Menyesuaikan toolbox untuk deployment Anda

Pada contoh berikut, kami mengasumsikan bahwa nama pengguna Anda adalah USER dan nama instance OS yang Dioptimalkan untuk Container adalah cos-dev.

Anda dapat menyesuaikan image Docker yang digunakan toolbox, serta jalur yang tersedia untuk toolbox di sistem file root. Setelan ini ada di file /etc/default/toolbox. File /etc/default/toolbox default biasanya mirip dengan yang berikut:

USER@cos-dev ~ $ cat /etc/default/toolbox
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox"
TOOLBOX_DOCKER_TAG="v20220722"
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/ --bind=/etc/resolv.conf:/etc/resolv.conf"
: ${USER:=root}
  • Variabel TOOLBOX_DOCKER_IMAGE dan TOOLBOX_DOCKER_TAG menentukan image Docker yang akan digunakan. gcr.io/cos-cloud/toolbox default dilengkapi dengan beberapa alat umum seperti Google Cloud CLI yang telah diinstal sebelumnya.
  • Variabel TOOLBOX_BIND menentukan jalur dari rootf yang akan tersedia di dalam lingkungan toolbox.

Untuk mengubah setelan default, ubah file /etc/default/toolbox, atau tentukan nilai baru untuk variabel di ${HOME}/.toolboxrc untuk pengguna yang sesuai. Misalnya, dengan asumsi Anda ingin toolbox menggunakan fedora:latest sebagai container-nya, Anda dapat menjalankan perintah berikut:

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE=docker.io/library/fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox

Di Pencapaian 93, toolbox akan gagal mengambil gambar toolbox kustom. Untuk mengatasi masalah ini, build tar ball image docker toolbox kustom dan ekspor melalui file ${HOME}/.toolboxrc atau file /etc/default/toolbox.

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
File `/etc/default/toolbox` dapat diubah seperti yang ditunjukkan di bawah ini.
USER@cos-dev ~ $ cat /etc/default/toolbox
    # Copyright 2016 The Chromium OS Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.

    TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox"
    TOOLBOX_DOCKER_TAG="v20220722"
    TOOLBOX_DOCKER_IMAGE_TARBALL=[location/to/tarball]
    TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/"
    : ${USER:=root}
USER@cos-dev ~ $ toolbox

Menginstal dan menjalankan alat dari toolbox

Setelah memanggil utilitas toolbox untuk memulai shell, Anda dapat menggunakan apt-get di dalam penampung yang dihasilkan untuk menginstal paket. Contoh:

# Inside the toolbox shell
USER@cos-dev ~ $ toolbox
root@cos-dev:~# apt-get update && apt-get install -y htop psmisc
root@cos-dev:~# htop
root@cos-dev:~# pstree -p
root@cos-dev:~# exit

Anda tidak selalu harus memasukkan toolbox untuk menjalankan perintah di dalamnya. Anda cukup memberi awalan pada perintah Anda dengan toolbox. Misalnya, untuk menginstal dan menjalankan utilitas strace guna melacak eksekusi daemon Docker, Anda dapat melakukan hal berikut:

USER@cos-dev ~ $ toolbox apt-get install -y strace
USER@cos-dev ~ $ toolbox strace -p `pidof dockerd`

Google Cloud CLI sudah terinstal di toolbox:

USER@cos-dev ~ $ toolbox
root@cos-dev:~# which gcloud
/google-cloud-sdk/bin/gcloud
# View installed components
root@cos-dev:~# gcloud components list

Your current gcloud CLI version is: 287.0.0
The latest available version is: 295.0.0
...

Perlu diingat bahwa gcloud CLI hanya dapat mengakses resource yang boleh diakses instance VM. Baca dokumentasi Compute Engine untuk mempelajari lebih lanjut cara menyediakan instance VM dengan akses ke resource lain.

Baca dokumentasi Google Cloud CLI untuk mempelajari lebih lanjut cara menggunakan gcloud CLI.

Memasukkan file ke dan dari kotak peralatan

Sistem file root host dapat diakses di dalam toolbox melalui jalur /media/root. Di host, direktori utama toolbox dapat diakses melalui jalur berikut: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root dengan USER sebagai nama pengguna Anda dan VERSION adalah nomor versi toolbox (misalnya, v20220722).

Contoh berikut menunjukkan cara memasukkan file ke dalam dan ke luar toolbox:

# Access the host filesystem inside the toolbox
USER@cos-dev ~ $ toolbox
root@cos-dev:~# ls /media/root
bin  boot  dev  etc  home  lib  lib64  ...
root@cos-dev:~# cp /media/root/home/USER/some-file .

# Access toolbox directory from the host
USER@cos-dev ~ $ sudo cp some-file /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-v20220722/root

# Run a command inside toolbox and save its output in your home directory
USER@cos-dev ~ $ toolbox strace -o /media/root/$HOME/ls.strace ls
USER@cos-dev ~ $ more $HOME/ls.strace

Membersihkan kapasitas {i>disk<i} yang digunakan oleh {i>toolbox<i}

Penginstalan toolbox menghabiskan ruang disk sekitar 2-3 GB di /var (penggunaan disk bervariasi sesuai versi Container-Optimized OS). Untuk mengosongkan kapasitas disk yang digunakan oleh toolbox, lakukan tugas berikut, bergantung pada versi OS yang Dioptimalkan untuk Container:

Pencapaian 89 dan sebelumnya

# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*

# remove container artifacts
docker image rm $IMAGE_PATH:$TAG

Anda dapat menjalankan docker image ls untuk menentukan nilai ini. Misalnya, IMAGE_PATH=gcr.io/cos-cloud/toolbox dan TAG=v20220722.

Pencapaian 93 dan yang lebih baru

# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

Anda dapat menjalankan sudo ctr images ls -q untuk menentukan nilai ini. Misalnya, IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722.