1. Sealos 介绍及源码架构
sealos 官网 (opens new window) 云平台 (opens new window) github (opens new window)
#
# sealos 能力
# 代码目录
代码目录
├─cmd # 入口
│ ├─image-cri-shim # 拦截 kubectl 和 containerd 通信,可以在其中做一些替换镜像的工作
│ │ └─cmd
│ ├─lvscare # 负载均衡器 -- 每一个节点都会跑一个 内核 ipvs 达到高可用
│ │ └─cmd
│ ├─sealctl # 补充命令 比如 ipvsadmin
│ │ └─cmd
│ └─sealos #
│ └─cmd
└─run.go # 入口文件
├─controllers # 各种控制器,自定义的 CRD 控制器
│ ├─app # 管理整个应用的生命周期
│ │ ├─api
│ │ │ └─v1
│ │ ├─config
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ └─samples
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ └─hack
│ ├─cluster # 管理 aws 上 k8s 生命周期
│ │ ├─api
│ │ │ └─v1
│ │ ├─config
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ └─samples
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ └─hack
│ ├─imagehub
│ │ ├─api
│ │ │ └─v1
│ │ ├─config
│ │ │ ├─certmanager
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ ├─samples
│ │ │ └─webhook
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ └─hack
│ ├─infra # 管理基础设施
│ │ ├─api
│ │ │ └─v1
│ │ ├─common
│ │ ├─config
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ └─samples
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ ├─drivers
│ │ │ └─aws
│ │ └─hack
│ ├─metering # 资源计量,统计
│ │ ├─api
│ │ │ └─v1
│ │ ├─config
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ └─samples
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ └─hack
│ ├─terminal # 自定义终端
│ │ ├─api
│ │ │ └─v1
│ │ ├─config
│ │ │ ├─crd
│ │ │ │ ├─bases
│ │ │ │ └─patches
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─prometheus
│ │ │ ├─rbac
│ │ │ └─samples
│ │ ├─controllers
│ │ ├─deploy
│ │ │ └─manifests
│ │ ├─hack
│ │ └─scripts
│ └─user
│ ├─api
│ │ └─v1
│ ├─config
│ │ ├─certmanager
│ │ ├─crd
│ │ │ ├─bases
│ │ │ └─patches
│ │ ├─default
│ │ ├─manager
│ │ ├─prometheus
│ │ ├─rbac
│ │ ├─samples
│ │ └─webhook
│ ├─controllers
│ │ ├─cache
│ │ └─helper
│ ├─deploy
│ │ └─manifests
│ │ └─config
│ │ ├─certmanager
│ │ ├─crd
│ │ │ ├─bases
│ │ │ └─patches
│ │ ├─default
│ │ ├─manager
│ │ ├─prometheus
│ │ ├─rbac
│ │ ├─samples
│ │ └─webhook
│ └─hack
├─desktop # 前端界面
│ ├─client-sdk
│ │ └─src
│ └─frontend
│ ├─deploy
│ │ └─manifests
│ ├─public
│ │ ├─icons
│ │ └─images
│ │ ├─icons
│ │ └─infraicon
│ ├─src
│ │ ├─applications
│ │ │ ├─app_store
│ │ │ ├─infra
│ │ │ └─setting
│ │ ├─assets
│ │ │ └─icons
│ │ ├─components
│ │ │ ├─app_icon
│ │ │ ├─app_window
│ │ │ ├─background
│ │ │ ├─battery
│ │ │ ├─desktop_content
│ │ │ ├─icons
│ │ │ ├─markdown
│ │ │ ├─start_menu
│ │ │ └─taskbar
│ │ ├─constants
│ │ ├─hooks
│ │ ├─interfaces
│ │ ├─layout
│ │ ├─mock
│ │ │ └─hub
│ │ ├─pages
│ │ │ ├─api
│ │ │ │ ├─cloud
│ │ │ │ ├─desktop
│ │ │ │ ├─image_hub
│ │ │ │ ├─infra
│ │ │ │ └─kubernetes
│ │ │ │ ├─account
│ │ │ │ │ └─payment
│ │ │ │ ├─apply
│ │ │ │ └─pods
│ │ │ └─login
│ │ ├─services
│ │ │ └─backend
│ │ ├─stores
│ │ ├─styles
│ │ └─utils
│ └─tests
├─pkg # 所有代码实际实现
│ ├─apply # 实际状态跟期望状态对比的实现
│ │ ├─applydrivers
│ │ └─processor
│ ├─auth
│ │ ├─conf
│ │ ├─sso
│ │ └─utils
│ ├─bootstrap
│ ├─buildimage # 镜像构建
│ │ ├─manifests
│ │ └─test
│ ├─cert # 证书
│ │ └─pki
│ │ └─etcd
│ ├─checker # 检查环境
│ ├─client-go # 调用 kubernetes 接口
│ │ └─kubernetes
│ ├─cloud
│ │ └─src
│ │ ├─components
│ │ ├─routes
│ │ └─services
│ ├─clusterfile #
│ │ └─testdata
│ ├─config # 配置文件 -- 系统和业务的配置文件
│ ├─constants
│ ├─env
│ │ └─test
│ │ └─template
│ ├─filesystem # 分发镜像
│ │ ├─registry
│ │ └─rootfs
│ ├─guest # 执行镜像 CMD 命令
│ ├─image # 镜像构建
│ │ ├─binary
│ │ ├─buildah
│ │ │ ├─cluster
│ │ │ │ └─buildah
│ │ │ │ └─parse
│ │ │ ├─image
│ │ │ └─registry
│ │ ├─cmd
│ │ └─types
│ ├─infra # 对接公有云相关
│ │ ├─aliyun
│ │ └─huawei
│ ├─ipvs # 负载均衡
│ ├─passwd
│ ├─pay # 微信支付 CRD -- 可以自定义付费功能
│ ├─registry # 仓库相关 -- dockerhub 私有仓库
│ │ ├─cmd
│ │ ├─distributionpkg
│ │ │ ├─client
│ │ │ │ ├─auth
│ │ │ │ │ └─challenge
│ │ │ │ └─transport
│ │ │ └─proxy
│ │ │ └─scheduler
│ │ └─testdata
│ ├─remote
│ ├─runtime # 实际安装 k8s 集群的实现 -- 重写 kubeadmin 命令
│ │ └─defaults
│ │ └─v125
│ ├─ssh
│ ├─template
│ ├─types
│ │ ├─v1beta1
│ │ └─validation
│ ├─utils
│ │ ├─archive
│ │ │ └─testdata
│ │ │ └─dd
│ │ ├─confirm
│ │ ├─exec
│ │ ├─file
│ │ ├─flags
│ │ ├─hash
│ │ ├─hosts
│ │ ├─http
│ │ ├─httpserver
│ │ ├─images
│ │ ├─iputils
│ │ ├─json
│ │ ├─logger
│ │ ├─maps
│ │ ├─net
│ │ ├─progress
│ │ ├─rand
│ │ ├─registry
│ │ ├─retry
│ │ ├─strings
│ │ ├─sync
│ │ ├─template
│ │ ├─tmpl
│ │ ├─toml
│ │ ├─versionutil
│ │ └─yaml
│ └─version
├─proposal
│ └─design
│ └─zh
├─scripts
│ ├─lib
│ ├─make-rules
│ ├─release
│ └─template
├─service # 第三方服务 --- http 服务
│ ├─auth
│ │ ├─api
│ │ ├─conf
│ │ ├─deploy
│ │ │ └─manifests
│ │ ├─kustomize
│ │ │ ├─default
│ │ │ ├─manager
│ │ │ ├─rbac
│ │ │ └─service
│ │ └─test
│ └─payment
│ ├─api
│ └─cmd
├─staging
│ └─src
│ └─github.com
│ └─labring
│ ├─image-cri-shim
│ │ └─pkg
│ │ ├─cri
│ │ ├─server
│ │ └─shim
│ │ └─testdata
│ └─lvscare
│ ├─care
│ └─pkg
│ ├─route
│ └─version
├─test
│ ├─exec-cmd-in-mountpoint-dir
│ │ ├─imageA
│ │ └─imageB
│ ├─old
│ └─testhelper
│ └─settings
└─webhooks
└─whitelist
├─api
│ └─v1
├─config
│ ├─certmanager
│ ├─crd
│ │ ├─bases
│ │ └─patches
│ ├─default
│ ├─manager
│ ├─prometheus
│ ├─rbac
│ ├─samples
│ └─webhook
├─controllers
├─deploy
│ └─manifests
└─hack
# 入口文件
// cmd/sealos/cmd/run.go
func newRunCmd() *cobra.Command {
runArgs := &apply.RunArgs{
Cluster: &apply.Cluster{},
SSH: &apply.SSH{},
}
var runSingle bool
var runCmd = &cobra.Command{
Use: "run",
Short: "simplest way to run your kubernetes HA cluster",
Long: `sealos run labring/kubernetes:v1.24.0 --masters [arg] --nodes [arg]`,
Example: exampleRun,
RunE: func(cmd *cobra.Command, args []string) error {
if runSingle {
addr, _ := iputils.ListLocalHostAddrs()
runArgs.Masters = iputils.LocalIP(addr)
}
images, err := args2Images(args)
if err != nil {
return err
}
applier, err := apply.NewApplierFromArgs(images, runArgs)
if err != nil {
return err
}
// 重点 申明式
return applier.Apply()
},
PreRunE: func(cmd *cobra.Command, args []string) error {
if !strings2.In(types.DefaultTransport, []string{types.OCIArchive, types.DockerArchive}) {
return fmt.Errorf("transport parameters must be %s or %s", types.OCIArchive, types.DockerArchive)
}
return nil
},
PostRun: func(cmd *cobra.Command, args []string) {
logger.Info(getContact())
},
}
runArgs.RegisterFlags(runCmd.Flags())
runCmd.Flags().BoolVar(&runSingle, "single", false, "run cluster in single mode")
runCmd.Flags().BoolVarP(&processor.ForceOverride, "force", "f", false, "force override app in this cluster")
runCmd.Flags().StringVarP(&types.DefaultTransport, "transport", "t", types.OCIArchive, fmt.Sprintf("load image transport from tar archive file.(optional value: %s, %s)", types.OCIArchive, types.DockerArchive))
return runCmd
}
上次更新: 2022/12/02, 12:57:15