Replies: 7 comments 14 replies
-
就像SorageClass 其实不关心你是ceph还是NFS ,所以这个Infra的字段需要调整一下我感觉 |
Beta Was this translation helpful? Give feedback.
-
其实我再开发的过程中发现差异性的确很大,比如GPU,ARM等等 需要依赖的资源太多,所以这些资源其实不一定一个Infra就够用,其实Infra只需要关心是阿里云的配置是什么,我们可以针对不同的厂商做不同的CRD,就像ceph和NFS是不一样的资源定义一样。 |
Beta Was this translation helpful? Give feedback.
-
这里比较重要的就是 云资源 CRD 的定义,把 IaaS 也像 kubernetes 那样面向终态去定义。 能力差异问题: 我们只需要看 sealos 需要什么,不需要看云厂商有什么。 可以取交集,因为 sealos 关心的东西很明确。 kubernetes 对资源的定义就很抽象。 sealos 需要哪些:我觉得尽可能让用户少关心一些东西。 比如 LB 交换机这些东西,尽量不要让用户有感知,确实会去创建,by default 就行,用户通常最关心的还是 CPU 内存 磁盘 带宽 和节点数量,先做最小集,以后再扩展 |
Beta Was this translation helpful? Give feedback.
-
很高心,我跟大家的理解基本是一致的(达成共识)。在一致共识的基础上,如果让我去实现infra,我会按照下面四个步骤来实现:
第一步:定义一个Kind为CloudProviderClass的CRD, 如下:
第二步: 抽象ProviderInterface, 如下
第三步:适配不同云厂商的sdk, 最终输出不同云厂商的CpcProvider
第四步:使用 CloudProviderClass
|
Beta Was this translation helpful? Give feedback.
-
apiVersion: xxx
kind: Infra
metadata:
name: alicloud-infra-demo
spec:
provider: AliyunProvider
credential:
accessKey: xxx
accessSecret: xxx
cluster:
isSeize: true
regionIds: [cn-hangzhou, cn-shanghai]
zoneIds: [cn-hangzhou-a, cn-hangzhou-b] # If the value is empty, a random value will be used.
annotations: #set default value,if exist not delete resource
sealos.io/VpcID: v-xxxxx
sealos.io/VSwitchID: v-xxxxx
sealos.io/SecurityGroupID: v-xxxxx
accessChannels: # If all access channels are the same, it will be filled.
ssh:
passwd: xxx #If the passwd is empty, a random password will be generated.
port: 22
hosts:
- roles: [master, aaa, bbb]
count: 3
cpu: 4
memory: 4
# ENUM: amd64/arm64 (NOTE: the default value is amd64)
arch: amd64
ecsType: "ecs.n1.medium" #fixed ecs type
os: # 默认 CentOS 7.6
name: CentOS # ENUM: CentOS/Ubuntu/Debain and so on.
version: 7.6
id: xxx # 允许用户指定已有的镜像ID (Optional)
disks:
# The first disk is system disk. Otherwise, it is a data disk.
- capacity: 100
category: cloud_ssd
- capacity: 50
category: cloud_essd
status:
cluster:
regionId: cn-hangzhou
zoneId: cn-hangzhou-a
annotations:
sealos.io/VpcID: v-xxxxx
sealos.io/VSwitchID: v-xxxxx
sealos.io/SecurityGroupID: v-xxxxx
sealos.io/EIPID: v-xxxxx
spotStrategy: SpotAsPriceGo
eip: 10.0.x.x
master0ID: xxxx
master0InternalIP: 192.168.x.x
hosts:
- ready: true
roles: [master,sss]
IDs: xxx,xxxx,xxx
IPs: xxx,xxx,xxx
instanceType: xxxx
arch: arm64
imageID: xxxxx
systemCategory: xxxx
dataCategory: xxxx 这是目前的定义,有些参数需要想一下如何存储,是单独定义一个阿里云的CRD去存储 还是依然存储到这个CloudProviderClass 中。 |
Beta Was this translation helpful? Give feedback.
-
disks:
# The first disk is system disk. Otherwise, it is a data disk.
- capacity: 100
category: cloud_ssd
- capacity: 50
category: cloud_essd 这块是不是拆分一下系统盘和数据盘好点? 数据盘可以扩容/挂载,系统盘只负责程序 |
Beta Was this translation helpful? Give feedback.
-
apiVersion: xxx
kind: Infra
metadata:
name: aws-infra-demo
annotations:
sealos.io/VpcID: v-xxxxx
sealos.io/RouteID: v-xxxxx
sealos.io/IgwID: v-xxxxxx
sealos.io/EgwID: v-xxxxxx
sealos.io/SubnetID: v-xxxxx
sealos.io/SecurityGroupID: v-xxxxx
sealos.io/EIPID: v-xxxxx
spec:
provider: AliyunProvider
credential:
accessKey: xxx
accessSecret: xxx
cluster:
regionIds: [cn-hangzhou, cn-shanghai]
zoneIds: [cn-hangzhou-a, cn-hangzhou-b]
accessChannels:
ssh:
username: ubuntu
# ENUM: passfile/pkfile
type: pkfile
data: $homedir/.ssh/seolos.pk or $homedir/.ssh/seolos.pass
port: 22
hosts:
- roles: [master, aaa, bbb] # required
count: 3 # Required
cpu: 2
memory: 4
# ENUM: amd64/arm64 (NOTE: the default value is amd64)
arch: amd64
os:
# ENUM: CentOS/Ubuntu/Debain and so on.
name: Ubuntu
version: 20.04
disks:
- capacity: 50
# ENUM: system/data
type: system
status:
cluster:
id: cluster-uuid
name: regionID-zoneID
regionId: cn-hangzhou
zoneId: cn-hangzhou-a
eip: 10.0.x.x
master0ID: xxxx
master0InternalIP: 192.168.x.x
hosts:
- ready: true
roles: [master,sss]
InternalIPs:
instance_id: []string{ip1, ip2}
instanceType: xxxx
arch: arm64
imageID: xxxxx 用户要输入的最基本参数:credential中的密钥以及hosts(roles, count, cpu, memory). 其他参数都可以默认。 |
Beta Was this translation helpful? Give feedback.
-
个人对infra模块的整体的理解
个人对infra模块的理解是,在使用sealos时无需关注各大云厂商的基础设施。只需要熟悉
sealos的配置,即可管理各大云厂商的iaas资源。
现状以及可以改善的方向
读完已有的infra模块的代码,以下是我个人的一些思考和看法:
问题: 对接各个云厂商的iaas资源,目前没有一个统一的标准。
k8s通过cri和csi来使用底层(docker or containerd, ceph or nfs 等等)的资源。对于sealos来说,无需关注各大云厂商提供的iaas资源,只需要关注interface标准,通过interface写provider集成各大云厂商能力,进而抹平云厂商之间的差异。
问题:云厂商的iaas能力存在差异性
问题:如何定义好infra模块的边界,也就是说sealos需要云厂商的哪些资源。
问题:跨云厂商如何构建sealos系统。
问题:企业自建IDC机房和云厂商如何构建sealos系统。
短期目标
短期目标应该能够让sealer能够在同一云厂商内构建自己的sealos系统。
长期目标
长期目标应该能够让sealer能够在不同云厂商之间构建自己的sealos系统。
Beta Was this translation helpful? Give feedback.
All reactions