這款工具可以把Kubernetes集群打包成一個(gè)鏡像
sealer[ˈsiːlər]是一款分布式應(yīng)用打包交付運(yùn)行的解決方案,通過把分布式應(yīng)用及其數(shù)據(jù)庫中間件等依賴一起打包以解決復(fù)雜應(yīng)用的交付問題。
sealer 構(gòu)建出來的產(chǎn)物我們稱之為集群鏡像, 集群鏡像里內(nèi)嵌了一個(gè) kubernetes, 解決了分布式應(yīng)用的交付一致性問題。集群鏡像可以 push 到 registry 中共享給其他用戶使用,也可以在官方倉庫中找到非常通用的分布式軟件直接使用。
Docker 可以把一個(gè)操作系統(tǒng)的 rootfs+應(yīng)用 build 成一個(gè)容器鏡像,sealer 把 kubernetes 看成操作系統(tǒng),在這個(gè)更高的抽象緯度上做出來的鏡像就是集群鏡像。實(shí)現(xiàn)整個(gè)集群的 Build Share Run !!!
有了集群鏡像用戶實(shí)踐云原生生態(tài)技術(shù)將變得極其簡(jiǎn)單,如:
1.安裝一個(gè) kubernetes 集群
- #安裝sealer
- wget https://github.com/alibaba/sealer/releases/download/v0.1.4/sealer-0.1.4-linux-amd64.tar.gz && \
- tar zxvf sealer-0.1.4-linux-amd64.tar.gz && mv sealer /usr/bin
- #運(yùn)行集群
- sealer run kubernetes:v1.19.9 # 在公有云上運(yùn)行一個(gè)kubernetes集群
- sealer run kubernetes:v1.19.9 --masters 3 --nodes 3 # 在公有云上運(yùn)行指定數(shù)量節(jié)點(diǎn)的kuberentes集群
- # 安裝到已經(jīng)存在的機(jī)器上
- sealer run kubernetes:v1.19.9 --masters 192.168.0.2,192.168.0.3,192.168.0.4 --nodes 192.168.0.5,192.168.0.6,192.168.0.7 --passwd xxx
2.安裝 prometheus 集群
- sealer run prometheus:2.26.0
上面命令就可以幫助你安裝一個(gè)包含 prometheus 的 kubernetes 集群, 同理其它軟件如 istio ingress grafana 等都可以通過這種方式運(yùn)行。
還沒完,Sealer 最出色的地方是可以非常方便的讓用戶自定義一個(gè)集群的鏡像,通過像 Dockerfile 一樣的文件來描述和 build,也就是 Kubefile:
- FROM registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
- RUN wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
- CMD kubectl apply -f recommended.yaml
使用下面的 sealer build 命令就可以構(gòu)建集群鏡像:
- sealer build -t registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest .
然后一個(gè)包含 dashboard 的集群鏡像就被制作出來了,可以運(yùn)行或者分享給別人。
把制作好的集群鏡像推送到鏡像倉庫,集群鏡像倉庫兼容 docker 鏡像倉庫標(biāo)準(zhǔn),可以把集群鏡像推送到 docker hub、阿里 ACR、或者 Harbor 中
- sealer push registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
使用場(chǎng)景&特性
- [x] 極其簡(jiǎn)單的方式在生產(chǎn)環(huán)境中或者離線環(huán)境中安裝 kubernetes、以及 kubernetes 生態(tài)中其它軟件
- [x] 通過 Kubefile 可以非常簡(jiǎn)單的自定義 kubernetes 集群鏡像對(duì)集群和應(yīng)用進(jìn)行打包,并可以提交到倉庫中進(jìn)行分享
- [x] 強(qiáng)大的生命周期管理能力,以難以想象的簡(jiǎn)單的方式去做如集群升級(jí),集群備份恢復(fù),節(jié)點(diǎn)闊縮等操作
- [x] 速度極快 3min 以內(nèi)完成集群安裝
- [x] 支持 ARM x86, v1.20 以上版本支持 containerd,幾乎兼容所有支持 systemd 的 linux 操作系統(tǒng)
- [x] 不依賴 ansible haproxy keepalived, 高可用通過 ipvs 實(shí)現(xiàn),占用資源少,穩(wěn)定可靠
- [x] 官方倉庫中有非常多的生態(tài)軟件鏡像可以直接使用,包含所有依賴,一鍵安裝
快速開始
安裝一個(gè) kubernetes 集群
- sealer run kubernetes:v1.19.9 --masters 192.168.0.2 --passwd xxx
如果是在云上安裝:
- export ACCESSKEYID=xxx
- export ACCESSKEYSECRET=xxx
- sealer run registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
- # 或者指定節(jié)點(diǎn)數(shù)量運(yùn)行集群
- sealer run registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest \
- --masters 3 --nodes 3
- [root@iZm5e42unzb79kod55hehvZ ~]# kubectl get node
- NAME STATUS ROLES AGE VERSION
- izm5e42unzb79kod55hehvz Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r7z Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r8z Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r9z Ready <none> 18h v1.16.9
- izm5ehdjw3kru84f0kq7raz Ready <none> 18h v1.16.9
- izm5ehdjw3kru84f0kq7rbz Ready <none> 18h v1.16.9
查看鏡像默認(rèn)啟動(dòng)配置:
- sealer inspect -c registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
使用 Clusterfile 拉起一個(gè) k8s 集群
使用已經(jīng)提供好的官方基礎(chǔ)鏡像(sealer-io/kubernetes:v1.19.9)就可以快速拉起一個(gè) k8s 集群。
場(chǎng)景 1. 往已經(jīng)存在的服務(wù)器上去安裝,provider 類型為 BAREMETAL
Clusterfile 內(nèi)容:
- apiVersion: sealer.aliyun.com/v1alpha1
- kind: Cluster
- metadata:
- name: my-cluster
- spec:
- image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
- provider: BAREMETAL
- ssh:
- passwd:
- pk: xxx
- pkPasswd: xxx
- user: root
- network:
- interface: eth0
- cniName: calico
- podCIDR: 100.64.0.0/10
- svcCIDR: 10.96.0.0/22
- withoutCNI: false
- certSANS:
- - aliyun-inc.com
- - 10.0.0.2
- masters:
- ipList:
- - 172.20.125.234
- - 172.20.126.5
- - 172.20.126.6
- nodes:
- ipList:
- - 172.20.126.8
- - 172.20.126.9
- - 172.20.126.10
執(zhí)行如下所示命令:
- [root@iZm5e42unzb79kod55hehvZ ~]# sealer apply -f Clusterfile
- [root@iZm5e42unzb79kod55hehvZ ~]# kubectl get node
- NAME STATUS ROLES AGE VERSION
- izm5e42unzb79kod55hehvz Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r7z Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r8z Ready master 18h v1.16.9
- izm5ehdjw3kru84f0kq7r9z Ready <none> 18h v1.16.9
- izm5ehdjw3kru84f0kq7raz Ready <none> 18h v1.16.9
- izm5ehdjw3kru84f0kq7rbz Ready <none> 18h v1.16.9
場(chǎng)景 2. 自動(dòng)申請(qǐng)阿里云服務(wù)器進(jìn)行安裝, provider: ALI_CLOUD
Clusterfile:
- apiVersion: sealer.aliyun.com/v1alpha1
- kind: Cluster
- metadata:
- name: my-cluster
- spec:
- image: registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
- provider: ALI_CLOUD
- ssh:
- passwd:
- pk: xxx
- pkPasswd: xxx
- user: root
- network:
- interface: eth0
- cniName: calico
- podCIDR: 100.64.0.0/10
- svcCIDR: 10.96.0.0/22
- withoutCNI: false
- certSANS:
- - aliyun-inc.com
- - 10.0.0.2
- masters:
- cpu: 4
- memory: 4
- count: 3
- systemDisk: 100
- dataDisks:
- - 100
- nodes:
- cpu: 4
- memory: 4
- count: 3
- systemDisk: 100
- dataDisks:
- - 100
準(zhǔn)備好阿里云的ak sk
- [root@iZm5e42unzb79kod55hehvZ ~]# ACCESSKEYID=xxxxxxx ACCESSKEYSECRET=xxxxxxx sealer apply -f Clusterfile
基礎(chǔ)設(shè)置的一些源信息會(huì)被寫入到 Clusterfile 中,存儲(chǔ)在 /root/.sealer/[cluster-name]/Clusterfile 中, 所以可以這樣釋放集群:
- ./sealer delete -f /root/.sealer/my-cluster/Clusterfile
制作一個(gè)自定義的集群鏡像, 這里以制作一個(gè) dashboard 鏡像為例
新建一個(gè) dashboard 目錄,創(chuàng)建一個(gè)文件 Kubefile 內(nèi)容為:
- FROM registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.9
- RUN wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
- CMD kubectl apply -f recommended.yaml
- [root@iZm5e42unzb79kod55hehvZ dashboard]# export ACCESSKEYID=xxxxxxx
- [root@iZm5e42unzb79kod55hehvZ dashboard]# export ACCESSKEYSECRET=xxxxxxx
- [root@iZm5e42unzb79kod55hehvZ dashboard]# sealer build -f Kubefile -t my-kuberentes-cluster-with-dashboard:latest .
創(chuàng)建一個(gè)帶有 dashboard 的自定義集群, 操作同上,替換掉 Clusterfile 中的 image 字段即可:
- apiVersion: sealer.aliyun.com/v1alpha1
- kind: Cluster
- metadata:
- name: my-cluster
- spec:
- image: my-kuberentes-cluster-with-dashboard:latest
- provider: ALI_CLOUD
- ssh:
- passwd:
- pk: xxx
- pkPasswd: xxx
- user: root
- network:
- interface: eth0
- cniName: calico
- podCIDR: 100.64.0.0/10
- svcCIDR: 10.96.0.0/22
- withoutCNI: false
- certSANS:
- - aliyun-inc.com
- - 10.0.0.2
- masters:
- cpu: 4
- memory: 4
- count: 3
- systemDisk: 100
- dataDisks:
- - 100
- nodes:
- cpu: 4
- memory: 4
- count: 3
- systemDisk: 100
- dataDisks:
- - 100
- # 準(zhǔn)備好阿里云的ak sk
- [root@iZm5e42unzb79kod55hehvZ ~]# ACCESSKEYID=xxxxxxx ACCESSKEYSECRET=xxxxxxx sealer apply -f Clusterfile
把制作好的集群鏡像推送到鏡像倉庫:
- sealer tag my-kuberentes-cluster-with-dashboard:latest registry.cn-qingdao.aliyuncs.com/sealer-io/my-kuberentes-cluster-with-dashboard:latest
- sealer push registry.cn-qingdao.aliyuncs.com/sealer-io/my-kuberentes-cluster-with-dashboard:latest
就可以把鏡像復(fù)用給別人進(jìn)行使用。
倉庫地址:https://github.com/alibaba/sealer