140 lines
3.7 KiB
Go
140 lines
3.7 KiB
Go
package registry
|
|
|
|
import (
|
|
"github.com/eclipse/che-operator/pkg/deploy"
|
|
"github.com/eclipse/che-operator/pkg/util"
|
|
v12 "k8s.io/api/apps/v1"
|
|
"k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
v13 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/util/intstr"
|
|
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
|
|
)
|
|
|
|
func GetSpecRegistryDeployment(
|
|
deployContext *deploy.DeployContext,
|
|
registryType string,
|
|
registryImage string,
|
|
env []v1.EnvVar,
|
|
registryImagePullPolicy v1.PullPolicy,
|
|
registryMemoryLimit string,
|
|
registryMemoryRequest string,
|
|
probePath string) (*v12.Deployment, error) {
|
|
|
|
terminationGracePeriodSeconds := int64(30)
|
|
name := registryType + "-registry"
|
|
labels := deploy.GetLabels(deployContext.CheCluster, name)
|
|
_25Percent := intstr.FromString("25%")
|
|
_1 := int32(1)
|
|
_2 := int32(2)
|
|
isOptional := true
|
|
deployment := &v12.Deployment{
|
|
TypeMeta: v13.TypeMeta{
|
|
Kind: "Deployment",
|
|
APIVersion: "apps/v1",
|
|
},
|
|
ObjectMeta: v13.ObjectMeta{
|
|
Name: name,
|
|
Namespace: deployContext.CheCluster.Namespace,
|
|
Labels: labels,
|
|
},
|
|
Spec: v12.DeploymentSpec{
|
|
Replicas: &_1,
|
|
RevisionHistoryLimit: &_2,
|
|
Selector: &v13.LabelSelector{MatchLabels: labels},
|
|
Strategy: v12.DeploymentStrategy{
|
|
Type: v12.RollingUpdateDeploymentStrategyType,
|
|
RollingUpdate: &v12.RollingUpdateDeployment{
|
|
MaxSurge: &_25Percent,
|
|
MaxUnavailable: &_25Percent,
|
|
},
|
|
},
|
|
Template: v1.PodTemplateSpec{
|
|
ObjectMeta: v13.ObjectMeta{
|
|
Labels: labels,
|
|
},
|
|
Spec: v1.PodSpec{
|
|
Containers: []v1.Container{
|
|
{
|
|
Name: "che-" + name,
|
|
Image: registryImage,
|
|
ImagePullPolicy: registryImagePullPolicy,
|
|
Ports: []v1.ContainerPort{
|
|
{
|
|
Name: "http",
|
|
ContainerPort: 8080,
|
|
Protocol: "TCP",
|
|
},
|
|
},
|
|
Env: env,
|
|
EnvFrom: []v1.EnvFromSource{
|
|
{
|
|
ConfigMapRef: &v1.ConfigMapEnvSource{
|
|
Optional: &isOptional,
|
|
LocalObjectReference: v1.LocalObjectReference{
|
|
Name: registryType + "-registry",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Resources: v1.ResourceRequirements{
|
|
Requests: v1.ResourceList{
|
|
v1.ResourceMemory: resource.MustParse(registryMemoryRequest),
|
|
},
|
|
Limits: v1.ResourceList{
|
|
v1.ResourceMemory: resource.MustParse(registryMemoryLimit),
|
|
},
|
|
},
|
|
ReadinessProbe: &v1.Probe{
|
|
Handler: v1.Handler{
|
|
HTTPGet: &v1.HTTPGetAction{
|
|
Path: "/" + registryType + "s/",
|
|
Port: intstr.IntOrString{
|
|
Type: intstr.Int,
|
|
IntVal: int32(8080),
|
|
},
|
|
Scheme: v1.URISchemeHTTP,
|
|
},
|
|
},
|
|
InitialDelaySeconds: 3,
|
|
FailureThreshold: 10,
|
|
TimeoutSeconds: 3,
|
|
SuccessThreshold: 1,
|
|
PeriodSeconds: 10,
|
|
},
|
|
LivenessProbe: &v1.Probe{
|
|
Handler: v1.Handler{
|
|
HTTPGet: &v1.HTTPGetAction{
|
|
Path: "/" + registryType + "s/",
|
|
Port: intstr.IntOrString{
|
|
Type: intstr.Int,
|
|
IntVal: int32(8080),
|
|
},
|
|
Scheme: v1.URISchemeHTTP,
|
|
},
|
|
},
|
|
InitialDelaySeconds: 30,
|
|
FailureThreshold: 10,
|
|
TimeoutSeconds: 3,
|
|
SuccessThreshold: 1,
|
|
PeriodSeconds: 10,
|
|
},
|
|
},
|
|
},
|
|
RestartPolicy: "Always",
|
|
TerminationGracePeriodSeconds: &terminationGracePeriodSeconds,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
if !util.IsTestMode() {
|
|
err := controllerutil.SetControllerReference(deployContext.CheCluster, deployment, deployContext.ClusterAPI.Scheme)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return deployment, nil
|
|
}
|