分布式应用打包交付运行的解决方案sealer

简介: 通过把分布式应用及其数据库中间件等依赖一起打包以解决复杂应用的交付问题。

什么是sealer

sealer[ˈsiːlər]是一款分布式应用打包交付运行的解决方案,通过把分布式应用及其数据库中间件等依赖一起打包以解决复杂应用的交付问题。 sealer构建出来的产物我们称之为"集群镜像", 集群镜像里内嵌了一个kubernetes, 解决了分布式应用的交付一致性问题。 集群镜像可以push到registry中共享给其他用户使用,也可以在官方仓库中找到非常通用的分布式软件直接使用。

Docker可以把一个操作系统的rootfs+应用 build成一个容器镜像,sealer把kubernetes看成操作系统,在这个更高的抽象纬度上做出来的镜像就是集群镜像。 实现整个集群的Build Share Run !!!

有了集群镜像用户实践云原生生态技术将变得极其简单,如:

安装一个kubernetes集群

#安装sealer
wget https://github.com/alibaba/sealer/releases/download/v0.3.0/sealer-v0.3.0-linux-amd64.tar.gz && \
tar zxvf sealer-v0.3.0-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

安装prometheus集群

sealer run prometheus:2.26.0

上面命令就可以帮助你安装一个包含promeheus的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 -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

使用场景&特性

  • 极其简单的方式在生产环境中或者离线环境中安装kubernetes、以及kubernetes生态中其它软件
  • 通过Kubefile可以非常简单的自定义kubernetes集群镜像对集群和应用进行打包,并可以提交到仓库中进行分享
  • 强大的生命周期管理能力,以难以想想的简单的方式去做如集群升级,集群备份恢复,节点扩缩等操作
  • 速度极快3min以内完成集群安装
  • 支持ARM x86, v1.20以上版本支持containerd,几乎兼容所有支持systemd的linux操作系统
  • 不依赖ansible haproxy keepalived, 高可用通过ipvs实现,占用资源少,稳定可靠
  • 官方仓库中有非常多的生态软件镜像可以直接使用,包含所有依赖,一键安装

快速开始

安装一个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:
    # ssh的登录密码,如果使用的密钥登录则无需设置
    passwd: 
    # ssh的私钥文件绝对路径,例如/root/.ssh/id_rsa
    pk: xxx
    # ssh的私钥文件密码,如果没有的话就设置为""
    pkPasswd: xxx
    # ssh登录用户
    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:
    # ssh的登录密码,如果使用的密钥登录则无需设置
    passwd: 
    # ssh的私钥文件密码,如果没有的话就设置为""
    pk: xxx
    # ssh的私钥文件密码,如果没有的话就设置为""
    pkPasswd: xxx
    # ssh登录用户
    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

就可以把镜像复用给别人进行使用

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
负载均衡 NoSQL 算法
Redisson分布式锁数据一致性解决方案
通过以上的设计和实现, Redisson能够有效地解决分布式环境下数据一致性问题。但是, 任何技术都不可能万无一失, 在使用过程中还需要根据实际业务需求进行逻辑屏障的设计和错误处理机制的建立。
638 48
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
410 5
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
消息中间件 中间件 关系型数据库
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(四)
常用的分布式事务解决方案(二)
常用的分布式事务解决方案(二)
|
关系型数据库 MySQL
常见分布式事务的解决方案(一)
常见分布式事务的解决方案(一)
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
400 0
|
存储 分布式计算 算法
探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
在配置Hadoop集群之前,了解这三种模式的特点、适用场景和配置差异是非常重要的。这有助于用户根据个人需求和资源情况,选择最适合自己的Hadoop运行模式。在最初的学习和开发阶段,单机模式和伪分布式模式能为用户提供便利和成本效益。进而,当用户要处理大规模数据集时,完全分布式模式将是理想的选择。
1504 2
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
551 2
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)