跳转至

02 sealos 构建镜像

sealos 构建ingress 的镜像

下面展示如何使用helm 构建一个sealos 可用的ingress-nginx 的镜像

下载helm Charts

$ mkdir ingress-nginx && cd ingress-nginx
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm pull ingress-nginx/ingress-nginx

随后就能找到下载的 chart:

$ ls
ingress-nginx-4.8.2.tgz

添加镜像列表

解压helm charts , 然后查看ingress-nginx 的values 文件, 获得所有需要的镜像;

 $ tar -zxvf ingress-nginx-4.8.2.tgz
 $ cat ingress-nginx/values.yaml  

目录必须形如 images/shim/[your image list filename]

$ cat images/shim/nginxImages

registry.k8s.io/ingress-nginx/controller:v1.9.3
registry.k8s.io/ingress-nginx/opentelemetry:v20230721
registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20231011-8b53cabe0
registry.k8s.io/defaultbackend-amd64:1.5

编写Dockerfile

FROM scratch
COPY ../ingress-nginx .
CMD ["helm upgrade --install  ingress-nginx  --set controller.hostNetwork=true --set controller.dnsPolicy=ClusterFirstWithHostNet   ingress-nginx-4.8.2.tgz --namespace ingress-nginx --create-namespace"]

构建集群镜像

$ sealos build -f Dockerfile -t dockerhub.cmzhu.cn:5000/k8s/ingress-nginx:v1.2.0 .

Seals 在构建镜像时会自动将前面镜像列表中定义的镜像, 添加到镜像依赖中, 通过神奇的方式保存了里面依赖的Docker 镜像;并且在到别的环境中运行的时候更神奇的自动检测集群中是否有 Docker 镜像,有的话自动下载,没有的话才会去 k8s.gcr.io 下载。 用户无需修改 helm chart 中的 docker 镜像地址,这里用到了镜像缓存代理的黑科技。

$ sealos images
REPOSITORY                                             TAG       IMAGE ID       CREATED              SIZE
dockerhub.cmzhu.cn:5000/k8s/ingress-nginx              v1.2.0    976cba7a3f39   About a minute ago   135 MB

$ sealos push dockerhub.cmzhu.cn:5000/k8s/ingress-nginx:v1.2.0
Getting image source signatures
Copying blob a36012ff20cf done
Copying config 976cba7a3f done
Writing manifest to image destination
Storing signatures

运行集群镜像

$ sealos run dockerhub.cmzhu.cn:5000/k8s/ingress-nginx:v1.2.0