Skip to content

antony@notes:~/container$ cat "Offline-Import-Container-Image-on-Talos-Linux.md"

Offline Import Container Image on Talos Linux

2023-11-30· container

Offline Import Container Image on Talos Linux

Preface

本篇文章會介紹,如何在全離線的環境下,將事先準備好的 Container Image 打包檔(*.tar) Import 到 Talos Linux 中。

可以透過點擊展開以下目錄,選擇想看的內容,跳轉至特定章節

:::warning

:::spoiler {state=“open”} 文章目錄

[TOC]

:::

PreRequest

  • 已將 Talos Linux 作業系統安裝至硬碟中。

使用 Live CD 啟動 Talos Linux

  1. 下載 Live CD

下載連結 選擇 openSUSE-Leap-15.4-Rescue-CD-x86_64-Build85.5-Media.iso

  1. 在 Talos VM 新增 CD 並選擇剛剛下載的 LiveCD ISO 檔
  2. 編輯 Talos 虛擬機器設定檔 ( *.vmx )

加入以下內容

bios.bootDelay = "20000"

這使得虛擬機器在 POST 螢幕上停止 20 秒,並有足夠的時間來選擇開機裝置

  1. 將 VM 開機,並按 ESC 按鍵,會看到以下畫面

image

按鍵盤往下鍵,選到 3. CD-ROM Drive 選項之後按 Enter 鍵,此選項會透過 Live CD 開機

  1. 直接按 Enter 進入 OS

image

  1. 在桌面,滑鼠右鍵,選擇 Open Terminal here

image

環境設定

  1. 修改 root 使用者密碼為 root
$ echo -e "root\nroot" | sudo passwd root
  1. 啟動 SSHD
$ systemctl start sshd
  1. 透過 SSH 登入 VM

檢視 Talos Linux 硬碟資訊

  1. 檢視 Disk Partition 資訊和檔案系統類型
$ lsblk -f

螢幕輸出 :

NAME   FSTYPE   LABEL                        UUID                                 MOUNTPOINT
loop0  squashfs                                                                   /run/initramfs/s
loop1  ext4                                  ecfbe267-df0a-44a9-8bab-1d5da142f769 /run/rootfsbase
sda
├─sda1 vfat     EFI                          6845-805D
├─sda2
├─sda3 xfs      BOOT                         7676c4be-1cfb-40c5-a291-01f34e477a2b
├─sda4
├─sda5 xfs      STATE                        6dc58618-23ae-430b-b21c-caa3ac809633
└─sda6 xfs      EPHEMERAL                    ca8733c0-69ef-43ac-b905-bb5ff63dba76
sr0    iso9660  openSUSE_Leap_15.0_Rescue_CD 2019-09-30-05-31-32-00               /run/initramfs/l
sr1    iso9660  ISOIMAGE                     2023-11-09-13-32-16-00
  1. 透過 blkid 檢查
$ blkid

螢幕輸出 :

/dev/loop1: UUID="ba15380c-0a97-485a-9e2b-e5f13e0d9f65" BLOCK_SIZE="4096" TYPE="ext4"
/dev/sr0: BLOCK_SIZE="2048" UUID="2023-09-27-22-10-35-00" LABEL="openSUSE_Leap_15.4_Rescue_CD" TYPE="iso9660" PTTYPE="dos"
/dev/loop0: TYPE="squashfs"
/dev/sda4: PARTLABEL="META" PARTUUID="81bad570-9ebd-490a-a54e-a96d342353f0"
/dev/sda2: PARTLABEL="BIOS" PARTUUID="7204a786-f3c2-4cb1-b43e-2e5497997b28"
/dev/sda5: LABEL="STATE" UUID="6dc58618-23ae-430b-b21c-caa3ac809633" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="STATE" PARTUUID="3cc3c4ee-2517-4f98-a07d-508481da4c90"
/dev/sda3: LABEL="BOOT" UUID="7676c4be-1cfb-40c5-a291-01f34e477a2b" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="BOOT" PARTUUID="fbd7abbf-0c02-42c9-b109-3ca8c96f9cc4"
/dev/sda1: LABEL_FATBOOT="EFI" LABEL="EFI" UUID="6845-805D" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI" PARTUUID="71a8316d-6079-4031-aa5f-09f1729b5b7e"
/dev/sda6: LABEL="EPHEMERAL" UUID="ca8733c0-69ef-43ac-b905-bb5ff63dba76" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="EPHEMERAL" PARTUUID="917eecef-9915-4ff5-891c-58669392745e"
/dev/sr1: BLOCK_SIZE="2048" UUID="2023-11-09-13-32-16-00" LABEL="ISOIMAGE" TYPE="iso9660" PTTYPE="PMBR"
  1. 建立目錄
$ mkdir -p /talos/{efi,boot,state,EPHEMERAL}
  1. 將 Talos 的 Disk Partition 分別掛載至對應的目錄區
$ mount -t vfat /dev/sda1 /talos/efi
$ mount -t xfs /dev/sda3 /talos/boot
$ mount -t xfs /dev/sda5 /talos/state
$ mount -t xfs /dev/sda6 /talos/EPHEMERAL
  1. 安裝 containerd、ctr 和 tree 命令
$ zypper in -y tree containerd containerd-ctr
  1. 查看 Talos Linux 目錄區結構
$ tree -L 3 /talos/

螢幕輸出 :

/talos/
├── EPHEMERAL
│   ├── lib
│   │   ├── cni
│   │   ├── containerd
│   │   ├── etcd
│   │   └── kubelet
│   ├── lock
│   │   └── lvm
│   ├── log
│   │   ├── audit
│   │   ├── containers
│   │   └── pods
│   ├── run
│   │   ├── lock
│   │   └── netns
│   └── system
│       └── overlays
├── boot
│   ├── A
│   │   ├── initramfs.xz
│   │   └── vmlinuz
│   ├── EFI
│   └── grub
│       ├── fonts
│       ├── grub.cfg
│       ├── grubenv
│       └── i386-pc
├── efi
└── state
    ├── config.yaml
    ├── node-identity.yaml
    └── platform-network.yaml

25 directories, 7 files

設定與啟動 Containerd

  1. 設定 Containerd 儲存 Image 的目錄區
$ nano /etc/containerd/config.toml

檔案內容如下 :

version = 2

# persistent data location
root = "/talos/EPHEMERAL/lib/containerd/"
  1. 啟動 Containerd
$ /usr/sbin/containerd &
  1. 在別的機器透過 SCP 將準備好的 Image 拷貝至 Talos Linux 主機
$ sudo podman save quay.io/cloudwalker/alp.goweb:24.1 > alp.goweb.tar

$ scp alp.goweb.tar root@192.168.61.136:/root
  1. 檢查是否能看到 Talos Linux 中 k8s.io namespace 底下已經存在的 Image
$ containerd-ctr -n k8s.io image ls -q

螢幕輸出 :

docker.io/rancher/rancher-agent:v2.7.9
docker.io/rancher/rancher-agent@sha256:be68811b44350c56d6ef7eaf74f0fb85da59b859a3bb1b624abd247db9107f90
ghcr.io/siderolabs/flannel:v0.22.1
ghcr.io/siderolabs/flannel@sha256:b1269e3f19125887968c83fd73841e2d7a1b4f711802f426422273bd1a775d49
ghcr.io/siderolabs/install-cni:v1.5.0-1-g9d5f16f
ghcr.io/siderolabs/install-cni@sha256:5f10d52b9b2ad6a1790fe001035f9b2905ab8770cc449448a2379e57999c438a
registry.k8s.io/coredns/coredns:v1.10.1
registry.k8s.io/coredns/coredns@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e
registry.k8s.io/kube-apiserver:v1.28.1
registry.k8s.io/kube-apiserver@sha256:f517207d13adeb50c63f9bdac2824e0e7512817eca47ac0540685771243742b2
registry.k8s.io/kube-controller-manager:v1.28.1
registry.k8s.io/kube-controller-manager@sha256:dda6dba8a55203ed1595efcda865a526b9282c2d9b959e9ed0a88f54a7a91195
registry.k8s.io/kube-proxy:v1.28.1
registry.k8s.io/kube-proxy@sha256:30096ad233e7bfe72662180c5ac4497f732346d6d25b7c1f1c0c7cb1a1e7e41c
registry.k8s.io/kube-scheduler:v1.28.1
registry.k8s.io/kube-scheduler@sha256:3c9249a1f7623007a8db3522eac203f94cbb3910501879b792d95ea8470cc3d4
registry.k8s.io/pause:3.6
...以下省略
  1. 檢查是否能看到 Talos Linux 中 system namespace 底下已經存在的 Image
$ containerd-ctr -n system image ls -q

螢幕輸出 :

gcr.io/etcd-development/etcd:v3.5.9
gcr.io/etcd-development/etcd@sha256:8c956d9b0d39745fa574bb4dbacd362ffdc1109479432f54094859d4cf984b17
ghcr.io/siderolabs/kubelet:v1.28.1
ghcr.io/siderolabs/kubelet@sha256:e9a58540c14f20d278a641d83047beadbf8d5ac37e075928a7747c8b6a41d170
sha256:8c956d9b0d39745fa574bb4dbacd362ffdc1109479432f54094859d4cf984b17
sha256:e9a58540c14f20d278a641d83047beadbf8d5ac37e075928a7747c8b6a41d170

匯入 Image

  1. Import Image
$ containerd-ctr -n k8s.io image import alp.goweb.tar
  1. 檢查是否 Import 成功
$ containerd-ctr -n k8s.io image ls -q | grep go

螢幕輸出 :

quay.io/cloudwalker/alp.goweb:24.1
  1. 重新開機,並選擇從 Disk 啟動
$ reboot
  1. 在 Talos 外部管理主機執行 talosctl 檢查
$ talosctl -n 192.168.61.21 --talosconfig=talosconfig image list | grep go

螢幕輸出 :

192.168.61.21   quay.io/cloudwalker/alp.goweb:24.1
                          sha256:f621340706592234e4108f56e1ea92e5e5163d82e1a8ceabf8e0bfcf402766c5   180 MB   2023-11-30T15:40:44Z
  1. 躺平睡覺