使用operator实现kubernetes的sidecar管理主要参考阿里开源的openkruise项目,github地址:https://github.com/openkruise/kruise。
openkruise目前提供了5个工作负载控制器:
- Advanced StatefulSet
增强的默认的版本StatefulSet,有额外的功能,如inplace-update,pasue和MaxUnavailable。 - BroadcastJob
在集群所有节点上运行pod完成任务(类似于job的DaemonSet模式)。 - SidecarSet
它基于选择器将Sidecar容器注入Pod spec中,并且还能够升级Sidecar容器。 - UnitedDeployment
此控制器通过使用多个工作负载来管理分布在多个故障域中的应用程序容器。 - CloneSet
主要用于管理无状态应用程序的工作负载。它提供了一些新的功能,例如inplace update, specified pod deletion, configurable priority/scatter update, preUpdate/postUpdate hooks。
目前我只需要参考SidecarSet管理功能。
sidecarSet源码分析
openkruise/kruise/pkg/controller/sidecarset_controller.go
- 获取请求的sidecarSet对象
sidecarSet := &appsv1alpha1.SidecarSet{
}
err := r.Get(context.TODO(), request.NamespacedName, sidecarSet)
if err != nil {
if errors.IsNotFound(err) {
// Object not found, return. Created objects are automatically garbage collected.
// For additional cleanup logic use finalizers.
return reconcile.Result{
}, nil
}
// Error reading the object - requeue the request.
return reconcile.Result{
}, err
}
- 根据sidecarSet的标签选择器获取pod列表
selector