k3s打包及运行

k3s结构

k3s通过dapper工具在docker容器中进行项目打包,k3s的makefile通过dapper调用scripts目录下的shell脚本。
Dockerfile.dapper.dapper中定义CMD和ENTRYPOINT来透传make的指令。

.
├── ...
├── Dockerfile.dapper     # dapper运行的Dockerfile
├── Makefile              # Makefile
├── pkg                   # 代码生成相关代码
├── scripts               # make指令对应执行的shell脚本
├── ...

k3s代码生成

查看k3s代码时会发现pkg/data目录是空的,data目录下的代码由go generate生成
package-cli大致内容

tar cvf ./build/out/data.tar ./bin ./etc          # 将生成的bin和etc目录打tar包
GOOS=linux CC=gcc CXX=g++ "${GO}" generate        # 执行go generate生成data下的代码
go build ./cmd/k3s                                # 生成k3s二进制文件

go generate注释

//go:generate go run pkg/codegen/cleanup/main.go
//go:generate rm -rf pkg/generated
//go:generate go run pkg/codegen/main.go
//go:generate go fmt pkg/deploy/zz_generated_bindata.go
//go:generate go fmt pkg/static/zz_generated_bindata.go

通过go-bindata将文件打入k3s源码,后运行k3s时解压出后再单独调用解压后目录中bin下的二进制文件启动k3s下的各个子服务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容