in shardingsphere-operator/pkg/reconcile/proxy/deployment.go [55:166]
func ConstructCascadingDeployment(proxy *v1alpha1.ShardingSphereProxy) *v1.Deployment {
if proxy == nil || reflect.DeepEqual(proxy, &v1alpha1.ShardingSphereProxy{}) {
return &v1.Deployment{}
}
var (
maxUnavailable intstr.IntOrString
maxSurge intstr.IntOrString
)
if proxy.Annotations[AnnoRollingUpdateMaxUnavailable] != "" {
n, _ := strconv.Atoi(proxy.Annotations[AnnoRollingUpdateMaxUnavailable])
maxUnavailable = intstr.FromInt(n)
} else {
maxUnavailable = intstr.FromInt(0)
}
if proxy.Annotations[AnnoRollingUpdateMaxSurge] != "" {
n, _ := strconv.Atoi(proxy.Annotations[AnnoRollingUpdateMaxSurge])
maxSurge = intstr.FromInt(n)
} else {
maxSurge = intstr.FromInt(1)
}
dp := &v1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: proxy.Name,
Namespace: proxy.Namespace,
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(proxy.GetObjectMeta(), proxy.GroupVersionKind()),
},
},
Spec: v1.DeploymentSpec{
Strategy: v1.DeploymentStrategy{
Type: v1.RollingUpdateDeploymentStrategyType,
RollingUpdate: &v1.RollingUpdateDeployment{
MaxUnavailable: &maxUnavailable,
MaxSurge: &maxSurge,
},
},
Selector: &metav1.LabelSelector{
MatchLabels: map[string]string{
"apps": proxy.Name,
},
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"apps": proxy.Name,
},
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Name: "proxy",
Image: fmt.Sprintf("%s:%s", imageName, proxy.Spec.Version),
ImagePullPolicy: corev1.PullIfNotPresent,
Ports: []corev1.ContainerPort{
{
ContainerPort: proxy.Spec.Port,
},
},
Env: []corev1.EnvVar{
{
Name: "PORT",
Value: strconv.FormatInt(int64(proxy.Spec.Port), 10),
},
},
VolumeMounts: []corev1.VolumeMount{
{
Name: "config",
MountPath: "/opt/shardingsphere-proxy/conf",
},
},
},
},
Volumes: []corev1.Volume{
{
Name: "config",
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: proxy.Spec.ProxyConfigName,
},
},
},
},
},
},
},
},
}
if proxy.Spec.AutomaticScaling == nil {
dp.Spec.Replicas = &proxy.Spec.Replicas
}
dp.Spec.Template.Spec.Containers[0].Resources = proxy.Spec.Resources
if proxy.Spec.LivenessProbe != nil {
dp.Spec.Template.Spec.Containers[0].LivenessProbe = proxy.Spec.LivenessProbe
}
if proxy.Spec.ReadinessProbe != nil {
dp.Spec.Template.Spec.Containers[0].ReadinessProbe = proxy.Spec.ReadinessProbe
}
if proxy.Spec.StartupProbe != nil {
dp.Spec.Template.Spec.Containers[0].StartupProbe = proxy.Spec.StartupProbe
}
if len(proxy.Spec.ImagePullSecrets) > 0 {
dp.Spec.Template.Spec.ImagePullSecrets = proxy.Spec.ImagePullSecrets
}
return processOptionalParameter(proxy, dp)
}