antony@notes:~/container$ cat "Offline-Import-Container-Image-on-Talos-Linux.md"
Offline Import Container Image on Talos Linux
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
- 下載 Live CD
下載連結 選擇
openSUSE-Leap-15.4-Rescue-CD-x86_64-Build85.5-Media.iso
- 在 Talos VM 新增 CD 並選擇剛剛下載的 LiveCD ISO 檔
- 編輯 Talos 虛擬機器設定檔 (
*.vmx)
加入以下內容
bios.bootDelay = "20000"這使得虛擬機器在 POST 螢幕上停止 20 秒,並有足夠的時間來選擇開機裝置
- 將 VM 開機,並按 ESC 按鍵,會看到以下畫面

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

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

環境設定
- 修改 root 使用者密碼為
root
$ echo -e "root\nroot" | sudo passwd root- 啟動 SSHD
$ systemctl start sshd- 透過 SSH 登入 VM
檢視 Talos Linux 硬碟資訊
- 檢視 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- 透過
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"- 建立目錄
$ mkdir -p /talos/{efi,boot,state,EPHEMERAL}- 將 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- 安裝 containerd、ctr 和 tree 命令
$ zypper in -y tree containerd containerd-ctr- 查看 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
- 設定 Containerd 儲存 Image 的目錄區
$ nano /etc/containerd/config.toml檔案內容如下 :
version = 2
# persistent data location
root = "/talos/EPHEMERAL/lib/containerd/"- 啟動 Containerd
$ /usr/sbin/containerd &- 在別的機器透過 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- 檢查是否能看到 Talos Linux 中
k8s.ionamespace 底下已經存在的 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
...以下省略- 檢查是否能看到 Talos Linux 中
systemnamespace 底下已經存在的 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
- Import Image
$ containerd-ctr -n k8s.io image import alp.goweb.tar- 檢查是否 Import 成功
$ containerd-ctr -n k8s.io image ls -q | grep go螢幕輸出 :
quay.io/cloudwalker/alp.goweb:24.1- 重新開機,並選擇從 Disk 啟動
$ reboot- 在 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- 躺平睡覺