這款工具可以把Kubernetes集群打包成一個鏡像
sealer[ˈsiːlər]是一款分布式應用打包交付運行的解決方案,通過把分布式應用及其數據庫中間件等依賴一起打包以解決復雜應用的交付問題。
sealer 構建出來的產物我們稱之為集群鏡像, 集群鏡像里內嵌了一個 kubernetes, 解決了分布式應用的交付一致性問題。集群鏡像可以 push 到 registry 中共享給其他用戶使用,也可以在官方倉庫中找到非常通用的分布式軟件直接使用。
Docker 可以把一個操作系統的 rootfs+應用 build 成一個容器鏡像,sealer 把 kubernetes 看成操作系統,在這個更高的抽象緯度上做出來的鏡像就是集群鏡像。實現整個集群的 Build Share Run !!!
有了集群鏡像用戶實踐云原生生態技術將變得極其簡單,如:
1.安裝一個 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
- #運行集群
- sealer run kubernetes:v1.19.9 # 在公有云上運行一個kubernetes集群
- sealer run kubernetes:v1.19.9 --masters 3 --nodes 3 # 在公有云上運行指定數量節點的kuberentes集群
- # 安裝到已經存在的機器上
- 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
上面命令就可以幫助你安裝一個包含 prometheus 的 kubernetes 集群, 同理其它軟件如 istio ingress grafana 等都可以通過這種方式運行。
還沒完,Sealer 最出色的地方是可以非常方便的讓用戶自定義一個集群的鏡像,通過像 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 命令就可以構建集群鏡像:
- sealer build -t registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest .
然后一個包含 dashboard 的集群鏡像就被制作出來了,可以運行或者分享給別人。
把制作好的集群鏡像推送到鏡像倉庫,集群鏡像倉庫兼容 docker 鏡像倉庫標準,可以把集群鏡像推送到 docker hub、阿里 ACR、或者 Harbor 中
- sealer push registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
使用場景&特性
- [x] 極其簡單的方式在生產環境中或者離線環境中安裝 kubernetes、以及 kubernetes 生態中其它軟件
- [x] 通過 Kubefile 可以非常簡單的自定義 kubernetes 集群鏡像對集群和應用進行打包,并可以提交到倉庫中進行分享
- [x] 強大的生命周期管理能力,以難以想象的簡單的方式去做如集群升級,集群備份恢復,節點闊縮等操作
- [x] 速度極快 3min 以內完成集群安裝
- [x] 支持 ARM x86, v1.20 以上版本支持 containerd,幾乎兼容所有支持 systemd 的 linux 操作系統
- [x] 不依賴 ansible haproxy keepalived, 高可用通過 ipvs 實現,占用資源少,穩定可靠
- [x] 官方倉庫中有非常多的生態軟件鏡像可以直接使用,包含所有依賴,一鍵安裝
快速開始
安裝一個 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
- # 或者指定節點數量運行集群
- 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
查看鏡像默認啟動配置:
- sealer inspect -c registry.cn-qingdao.aliyuncs.com/sealer-io/dashboard:latest
使用 Clusterfile 拉起一個 k8s 集群
使用已經提供好的官方基礎鏡像(sealer-io/kubernetes:v1.19.9)就可以快速拉起一個 k8s 集群。
場景 1. 往已經存在的服務器上去安裝,provider 類型為 BAREMETAL
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: 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
執行如下所示命令:
- [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
場景 2. 自動申請阿里云服務器進行安裝, 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
準備好阿里云的ak sk
- [root@iZm5e42unzb79kod55hehvZ ~]# ACCESSKEYID=xxxxxxx ACCESSKEYSECRET=xxxxxxx sealer apply -f Clusterfile
基礎設置的一些源信息會被寫入到 Clusterfile 中,存儲在 /root/.sealer/[cluster-name]/Clusterfile 中, 所以可以這樣釋放集群:
- ./sealer delete -f /root/.sealer/my-cluster/Clusterfile
制作一個自定義的集群鏡像, 這里以制作一個 dashboard 鏡像為例
新建一個 dashboard 目錄,創建一個文件 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
- [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 .
創建一個帶有 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
- # 準備好阿里云的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
就可以把鏡像復用給別人進行使用。
倉庫地址:https://github.com/alibaba/sealer