1. 什么是openkruise
1.1 官网
http://openkruise.io/zh/docs
1.2 介绍
OpenKruise 是一个基于 Kubernetes 的扩展套件,
主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。
1.3 组件
1.3.1 Manager
Kruise-manager 是一个运行 controller 和 webhook 中心组件,
它通过 Deployment 部署在 kruise-system 命名空间中。
1.3.2 Daemon
它通过 DaemonSet 部署到每个 Node 节点上,提供镜像预热、
容器重启等功能。
2. 关键技术
2.1 原地升级
什么是原地升级
当我们要升级一个存量 Pod 中的镜像时,这是 重建升级 和 原地升级 的区别
重建升级时我们要删除旧 Pod、创建新 Pod
原地升级,我们仍然复用同一个 Pod 对象,只是修改它里面的字段
2.1.1 利用 kubelet 的容器重启机制
2.1.2 OpenKruise 控制器主动 Patch Pod Spec
2.1.3 保留 Pod 生命周期关键属性
4.适配
4.1 更新仓库名称(全局替换)
4.2 新增controller
openkruise/pkg/controller/controllers.go
```
var controllerAddFuncs map[string]func(manager.Manager) error
controllerAddFuncs = make(map[string]func(manager.Manager) error)
controllerAddFuncs["deploymentinstance"] = deploymentinstance.Add
```
openkruise/pkg/controller/deploymentinstance/deploymentinstance.go
```
func Add(mgr manger.Manager) error {
cluseterController := deplopyment.DeploymentReconciler{}
cluseterController.Steup(shardInformer)
cluseterController.StedupWithManger(mgr)
shardInformer.Start(stopch)
shardInformer.WaitforCacheSync(stopChan)
}
```
openkruise/pkg/controller/deployment/deployment_controller.go
```
func (dc *DeploymentReconciler)Steup(f informers.ShardInformerFactory) error{}
func (dc *DeploymentReconciler)StedupWithManger(mgr ctrl.Manager) error{}
func (dc *DeploymentReconciler)Start(ctx contentext.Contenxt) error{}
func (dc *DeploymentReconciler)Reconcile(ctx context.Context, req ctrl.Request)(result ctrl.Result, err error){}
```
4.3 add webhook
4.4 ccr_deamon_controller.go 新增event事件记录,可以反馈给上游更新
4.5 新增dockerfile_multiarch 使用 docker manifest create xxx
5 参考资料
https://bbs.huaweicloud.com/blogs/417777?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content
成都市高新区天府软件园G5栋3层
gongxj@xcentiot.com
186-2824-6831