cnrancher / autok3s

Run K3s Everywhere
https://www.suse.com
Apache License 2.0
755 stars 76 forks source link

[Question] 如何添加其他镜像到 `k3s-airgap-images.tar`中 #585

Closed jinjianming closed 1 year ago

jinjianming commented 1 year ago

@orangedeng 你好 我想将registry:2.7.1镜像也封装到k3s-airgap-images.tar离线镜像里面

1、docker save \
registry:2.7.1 \
docker.io/rancher/coredns-coredns:1.8.3 \
docker.io/rancher/klipper-helm:v0.6.6-build20211022 \
docker.io/rancher/klipper-lb:v0.2.0 \
docker.io/rancher/library-busybox:1.32.1 \
docker.io/rancher/library-traefik:1.7.19 \
docker.io/rancher/local-path-provisioner:v0.0.19 \
docker.io/rancher/metrics-server:v0.3.6 \
docker.io/rancher/pause:3.1 \
-o k3s-airgap-images.tar 

2、修改sha256sum.txt里面的sha值; 3、导出并导入

[root@HK-ChatGPT-Proxy01 ~]# autok3s  airgap export  v12015 /root/v12015.tar.gz
package v12015 export to /root/v12015.tar.gz succeed
[root@HK-ChatGPT-Proxy01 ~]# autok3s  airgap  import /root/v12015.tar.gz --debug 
DEBU[2023-04-27T19:55:52+08:00] Reporting metrics                            
? Please input the package name                                                                                                                                     DEBU[2023-04-27T19:55:52+08:00] failed to push metrics to telemetry          
2023/04/27 19:55:54 /go/src/github.com/cnrancher/autok3s/pkg/common/package.go:39 record not found
[0.140ms] [rows:0] SELECT * FROM `packages` WHERE name = "lll" ORDER BY `packages`.`name` LIMIT 1
? Please input the package name v12015-test

Error: checksum for file amd64/k3s-airgap-images.tar mismatch

应该怎么才能将其他镜像加到离线包中。

orangedeng commented 1 year ago

这个并不是airgap功能的目标场景,并不会从代码层面去支持,我将issue的label修改为 help wanted

从你的描述里面没有看到修改checksum的具体内容,但大概率是这一步出问题。所以你可以把生成checksum的shell步骤贴出来看看。

jinjianming commented 1 year ago

@orangedeng 抱歉是我没有描述完整、以下是我完整过程; 1、首先我通过airgap创建名为0428的v1.20.15+k3s1离线包

[root@HK-ChatGPT-Proxy01 ~]# autok3s airgap create 0428 --arch amd64 --k3s-version 'v1.20.15+k3s1'
airgap package 0428 record created, prepare to download
INFO[2023-04-28T09:24:28+08:00] generating version file                       package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:28+08:00] download amd64 resources                      package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:29+08:00] downloading k3s-airgap-images.tar.gz for amd64  package=0428 version=v1.20.15+k3s1
WARN[2023-04-28T09:24:29+08:00] failed to download resource k3s-airgap-images.tar.gz for amd64, skip this resource, failed to download resource https://github.com/k3s-io/k3s/releases/download/v1.20.15%2Bk3s1/k3s-airgap-images-amd64.tar.gz, Not Found  package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:29+08:00] downloading k3s-airgap-images.tar for amd64   package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:47+08:00] downloading sha256sum.txt for amd64           package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:47+08:00] downloading k3s for amd64                     package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:51+08:00] all downloaded files are validated for amd64  package=0428 version=v1.20.15+k3s1
INFO[2023-04-28T09:24:51+08:00] k3s resource for amd64 downloaded.            package=0428 version=v1.20.15+k3s1
airgap package 0428 created and stored in path /root/.autok3s/package/0428

2、进到 离线目录下进行添加镜像

cd /root/.autok3s/package/0428/amd64
[root@HK-ChatGPT-Proxy01 amd64]# ll
total 500032
-rw-r--r-- 1 root root  47284224 Apr 28 09:24 k3s
-rw-r--r-- 1 root root 464734208 Apr 28 09:24 k3s-airgap-images.tar
-rw-r--r-- 1 root root       327 Apr 28 09:24 k3s-images.txt
-rw-r--r-- 1 root root       245 Apr 28 09:24 sha256sum.txt
[root@HK-ChatGPT-Proxy01 amd64]# rm -rf k3s-airgap-images.tar
[root@HK-ChatGPT-Proxy01 amd64]#docker save \
registry:2.7.1 \
docker.io/rancher/coredns-coredns:1.8.3 \
docker.io/rancher/klipper-helm:v0.6.6-build20211022 \
docker.io/rancher/klipper-lb:v0.2.0 \
docker.io/rancher/library-busybox:1.32.1 \
docker.io/rancher/library-traefik:1.7.19 \
docker.io/rancher/local-path-provisioner:v0.0.19 \
docker.io/rancher/metrics-server:v0.3.6 \
docker.io/rancher/pause:3.1 \
-o k3s-airgap-images.tar

3、处理镜像文件; 我将新增镜像添加到k3s-images.txt文件中

[root@HK-ChatGPT-Proxy01 amd64]# cat k3s-images.txt 
registry:2.7.1
docker.io/rancher/coredns-coredns:1.8.3
docker.io/rancher/klipper-helm:v0.6.6-build20211022
docker.io/rancher/klipper-lb:v0.2.0
docker.io/rancher/library-busybox:1.32.1
docker.io/rancher/library-traefik:1.7.19
docker.io/rancher/local-path-provisioner:v0.0.19
docker.io/rancher/metrics-server:v0.3.6
docker.io/rancher/pause:3.1

4、处理256校验文件

[root@HK-ChatGPT-Proxy01 amd64]# rm -rf  sha256sum.txt
[root@HK-ChatGPT-Proxy01 amd64]# 
[root@HK-ChatGPT-Proxy01 amd64]# rm -rf  sha256sum.txt
[root@HK-ChatGPT-Proxy01 amd64]# sha256sum k3s  k3s-airgap-images.tar  k3s-images.txt   >  sha256sum.txt
[root@HK-ChatGPT-Proxy01 amd64]# cat sha256sum.txt
a3f06b4e0f3c677bc9780185ad7bc9d58b622a9811701d1ce07938d4c63962c6  k3s
37e126bf14e5df38a28612c3e19112cf2c9a6d440ecd2a1124dafb95ded3f755  k3s-airgap-images.tar
4f264dba3825f28851ae1f0ca3c02815dcafdbea81252cc37c7ab8d9592f5a99  k3s-images.txt
[root@HK-ChatGPT-Proxy01 amd64]# sha256sum -c sha256sum.txt
k3s: OK
k3s-airgap-images.tar: OK
k3s-images.txt: OK

5、导出名为04280-registry.tar.gz的离线包

[root@HK-ChatGPT-Proxy01 amd64]# autok3s  airgap export  0428 /root/04280-registry.tar.gz
package 0428 export to /root/04280-registry.tar.gz succeed

6、将/root/04280-registry.tar.gz导入,提示checksum失败;

[root@HK-ChatGPT-Proxy01 amd64]# autok3s  airgap  import /root/04280-registry.tar.gz  --debug
DEBU[2023-04-28T09:32:55+08:00] Reporting metrics                            
? Please input the package name 04280-registry
2023/04/28 09:32:57 /go/src/github.com/cnrancher/autok3s/pkg/common/package.go:39 record not found
[0.138ms] [rows:0] SELECT * FROM `packages` WHERE name = "04280-registry" ORDER BY `packages`.`name` LIMIT 1
? Please input the package name 04280-registry
Error: checksum for file amd64/k3s-airgap-images.tar mismatch
Usage:
  autok3s airgap import <path> [name] [flags]

Flags:
  -h, --help   help for import

Global Flags:
  -d, --debug   Enable log debug level
jinjianming commented 1 year ago

@orangedeng 有什么建议么~

jinjianming commented 1 year ago

找到问题了,校验的时候没有使用文件txt里面的文件名称而是自己拼接的. filepath.Join(basePath, arch) sha的txt里面必须叫 k3s-airgap-images-amd64.tar.gz,即使我的文件并不叫这个。

orangedeng commented 1 year ago

确实是这个问题,当时设计的时候是这样处理的: 为了保证scp文件时比较容易的能把source path和target path处理好,在本地存储airgap资源时统一了存储名称:

.
├── .done
├── amd64
│   ├── .done
│   ├── k3s
│   ├── k3s-airgap-images.tar.gz
│   ├── k3s-images.txt
│   └── sha256sum.txt
├── arm64
│   ├── .done
│   ├── k3s
│   ├── k3s-airgap-images.tar.gz
│   ├── k3s-images.txt
│   └── sha256sum.txt
└── version.json

但实际上验证文件的时候,会读取sha256sum的内容进行拆分并识别到对应资源的hash进行对比。 不过这个确实不是我当时设计的目标场景,谢谢反馈并给出workaround