Include registries in Che deployment (#51)
* Update API * Update defaults * update controller * Separate memory limits and requests as in PR https://github.com/eclipse/che/pull/13890/files#diff-a488b4bdede7547798a17f6830874b05R59 * update release script to also change default image tag of registry containers * Also remove overridden `nightly` registry images * Add registry nightly images in nightly OLM packages Signed-off-by: David Festal <dfestal@redhat.com>pull/53/head
parent
d02dd5abbf
commit
8837474a0f
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: checlusters.org.eclipse.che
|
||||
spec:
|
||||
group: org.eclipse.che
|
||||
names:
|
||||
kind: CheCluster
|
||||
listKind: CheClusterList
|
||||
plural: checlusters
|
||||
singular: checluster
|
||||
scope: Namespaced
|
||||
version: v1
|
||||
subresources:
|
||||
status: {}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -3,5 +3,5 @@ channels:
|
|||
- name: stable
|
||||
currentCSV: eclipse-che-preview-kubernetes.v7.0.0-rc-2.0
|
||||
- name: nightly
|
||||
currentCSV: eclipse-che-preview-kubernetes.v9.9.9-nightly.1563282936
|
||||
currentCSV: eclipse-che-preview-kubernetes.v9.9.9-nightly.1563539196
|
||||
defaultChannel: stable
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: apiextensions.k8s.io/v1beta1
|
||||
kind: CustomResourceDefinition
|
||||
metadata:
|
||||
name: checlusters.org.eclipse.che
|
||||
spec:
|
||||
group: org.eclipse.che
|
||||
names:
|
||||
kind: CheCluster
|
||||
listKind: CheClusterList
|
||||
plural: checlusters
|
||||
singular: checluster
|
||||
scope: Namespaced
|
||||
version: v1
|
||||
subresources:
|
||||
status: {}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -3,5 +3,5 @@ channels:
|
|||
- name: stable
|
||||
currentCSV: eclipse-che-preview-openshift.v7.0.0-rc-2.0
|
||||
- name: nightly
|
||||
currentCSV: eclipse-che-preview-openshift.v9.9.9-nightly.1563282936
|
||||
currentCSV: eclipse-che-preview-openshift.v9.9.9-nightly.1563539196
|
||||
defaultChannel: stable
|
||||
|
|
|
|||
|
|
@ -54,6 +54,8 @@ do
|
|||
-e 's/imagePullPolicy: *Always/imagePullPolicy: IfNotPresent/' \
|
||||
-e 's/"cheImageTag": *"nightly"/"cheImageTag": ""/' \
|
||||
-e 's|"identityProviderImage": *"eclipse/che-keycloak:nightly"|"identityProviderImage": ""|' \
|
||||
-e 's|"devfileRegistryImage": *"quay.io/eclipse/che-devfile-registry:nightly"|"devfileRegistryImage": ""|' \
|
||||
-e 's|"pluginRegistryImage": *"quay.io/eclipse/che-plugin-registry:nighlty"|"pluginRegistryImage": ""|' \
|
||||
-e "/^ replaces: ${packageName}.v.*/d" \
|
||||
-e "s/^ version: ${lastPackageNightlyVersion}/ version: ${RELEASE}/" \
|
||||
-e "/^ version: ${RELEASE}/i\ \ replaces: ${packageName}.v${lastPackagePreReleaseVersion}" \
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ package v1
|
|||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
|
||||
|
|
@ -52,8 +53,32 @@ type CheClusterSpecServer struct {
|
|||
TlsSupport bool `json:"tlsSupport"`
|
||||
// DevfileRegistryUrl is an endpoint serving sample ready-to-use devfiles. Defaults to https://che-devfile-registry.openshift.io
|
||||
DevfileRegistryUrl string `json:"devfileRegistryUrl"`
|
||||
// DevfileRegistryImage is image:tag used in Devfile registry deployment
|
||||
DevfileRegistryImage string `json:"devfileRegistryImage"`
|
||||
// DevfileRegistryImagePullPolicy is the image pull policy used in Devfile registry deployment
|
||||
DevfileRegistryImagePullPolicy corev1.PullPolicy `json:"devfileRegistryPullPolicy"`
|
||||
// DevfileRegistryMemoryLimit is the memory limit used in Devfile registry deployment
|
||||
DevfileRegistryMemoryLimit string `json:"devfileRegistryMemoryLimit"`
|
||||
// DevfileRegistryMemoryRequest is the memory request used in Devfile registry deployment
|
||||
DevfileRegistryMemoryRequest string `json:"devfileRegistryMemoryRequest"`
|
||||
// ExternalDevfileRegistry instructs operator on whether or not to deploy a dedicated Devfile registry server
|
||||
// By default a dedicated devfile registry server is started.
|
||||
// But if ExternalDevfileRegistry is `true`, then no such dedicated server will be started by the operator
|
||||
ExternalDevfileRegistry bool `json:"externalDevfileRegistry"`
|
||||
// PluginRegistryUrl is an endpoint serving plugin definitions. Defaults to https://che-plugin-registry.openshift.io
|
||||
PluginRegistryUrl string `json:"pluginRegistryUrl"`
|
||||
// PluginRegistryImage is image:tag used in Plugin registry deployment
|
||||
PluginRegistryImage string `json:"pluginRegistryImage"`
|
||||
// PluginRegistryImagePullPolicy is the image pull policy used in Plugin registry deployment
|
||||
PluginRegistryImagePullPolicy corev1.PullPolicy `json:"pluginRegistryPullPolicy"`
|
||||
// PluginRegistryMemoryLimit is the memory limit used in Plugin registry deployment
|
||||
PluginRegistryMemoryLimit string `json:"pluginRegistryMemoryLimit"`
|
||||
// PluginRegistryMemoryRequest is the memory request used in Plugin registry deployment
|
||||
PluginRegistryMemoryRequest string `json:"pluginRegistryMemoryRequest"`
|
||||
// ExternalPluginRegistry instructs operator on whether or not to deploy a dedicated Plugin registry server
|
||||
// By default a dedicated plugin registry server is started.
|
||||
// But if ExternalPluginRegistry is `true`, then no such dedicated server will be started by the operator
|
||||
ExternalPluginRegistry bool `json:"externalPluginRegistry"`
|
||||
// ProxyURL is protocol+hostname of a proxy server. Automatically added as JAVA_OPTS and https(s)_proxy
|
||||
// to Che server and workspaces containers
|
||||
ProxyURL string `json:"proxyURL"`
|
||||
|
|
@ -170,6 +195,10 @@ type CheClusterStatus struct {
|
|||
CheURL string `json:"cheURL"`
|
||||
// KeycloakURL is Keycloak protocol+route/ingress
|
||||
KeycloakURL string `json:"keycloakURL"`
|
||||
// DevfileRegistryURL is the Devfile registry protocol+route/ingress
|
||||
DevfileRegistryURL string `json:"devfileRegistryURL"`
|
||||
// PluginRegistryURL is the Plugin registry protocol+route/ingress
|
||||
PluginRegistryURL string `json:"pluginRegistryURL"`
|
||||
}
|
||||
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
|
|
|
|||
|
|
@ -367,6 +367,7 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
cheFlavor := util.GetValue(instance.Spec.Server.CheFlavor, deploy.DefaultCheFlavor)
|
||||
ingressStrategy := util.GetValue(instance.Spec.K8SOnly.IngressStrategy, deploy.DefaultIngressStrategy)
|
||||
ingressDomain := instance.Spec.K8SOnly.IngressDomain
|
||||
|
|
@ -375,6 +376,150 @@ func (r *ReconcileChe) Reconcile(request reconcile.Request) (reconcile.Result, e
|
|||
if tlsSupport {
|
||||
protocol = "https"
|
||||
}
|
||||
|
||||
addRegistryRoute := func (registryType string) (string, error) {
|
||||
registryName := "che-" + registryType + "-registry"
|
||||
host := ""
|
||||
if !isOpenShift {
|
||||
ingress := deploy.NewIngress(instance, registryName, registryName, 8080)
|
||||
if err := r.CreateNewIngress(instance, ingress); err != nil {
|
||||
return "", err
|
||||
}
|
||||
host = ingressDomain
|
||||
if ingressStrategy == "multi-host" {
|
||||
host = registryName + "-" + instance.Namespace + "." + ingressDomain
|
||||
}
|
||||
} else {
|
||||
route := deploy.NewRoute(instance, registryName, registryName, 8080)
|
||||
if tlsSupport {
|
||||
route = deploy.NewTlsRoute(instance, registryName, registryName, 8080)
|
||||
}
|
||||
if err := r.CreateNewRoute(instance, route); err != nil {
|
||||
return "", err
|
||||
}
|
||||
host = route.Spec.Host
|
||||
if len(host) < 1 {
|
||||
cheRoute := r.GetEffectiveRoute(instance, route.Name)
|
||||
host = cheRoute.Spec.Host
|
||||
}
|
||||
}
|
||||
return protocol + "://" + host, nil
|
||||
}
|
||||
|
||||
addRegistryDeployment := func (
|
||||
registryType string,
|
||||
registryImage string,
|
||||
registryImagePullPolicy corev1.PullPolicy,
|
||||
registryMemoryLimit string,
|
||||
registryMemoryRequest string,
|
||||
) (*reconcile.Result, error) {
|
||||
registryName := "che-" + registryType + "-registry"
|
||||
|
||||
// Create a new registry service
|
||||
registryLabels := deploy.GetLabels(instance, registryName)
|
||||
registryService := deploy.NewService(instance, registryName, []string{"http"}, []int32{8080}, registryLabels)
|
||||
if err := r.CreateService(instance,registryService); err != nil {
|
||||
return &reconcile.Result{}, err
|
||||
}
|
||||
// Create a new registry deployment
|
||||
registryDeployment := deploy.NewRegistryDeployment(
|
||||
instance,
|
||||
registryType,
|
||||
registryImage,
|
||||
registryImagePullPolicy,
|
||||
registryMemoryLimit,
|
||||
registryMemoryRequest,
|
||||
)
|
||||
if err := r.CreateNewDeployment(instance, registryDeployment); err != nil {
|
||||
return &reconcile.Result{}, err
|
||||
}
|
||||
time.Sleep(time.Duration(1) * time.Second)
|
||||
effectiveDeployment, err := r.GetEffectiveDeployment(instance, registryDeployment.Name)
|
||||
if err != nil {
|
||||
logrus.Errorf("Failed to get %s deployment: %s", registryDeployment.Name, err)
|
||||
return &reconcile.Result{}, err
|
||||
}
|
||||
if !tests {
|
||||
if effectiveDeployment.Status.AvailableReplicas != 1 {
|
||||
scaled := k8sclient.GetDeploymentStatus(registryName, instance.Namespace)
|
||||
if !scaled {
|
||||
return &reconcile.Result{Requeue: true, RequeueAfter: time.Second * 5}, err
|
||||
}
|
||||
}
|
||||
if effectiveDeployment.Spec.Template.Spec.Containers[0].Image != registryImage {
|
||||
newDeployment := deploy.NewRegistryDeployment(
|
||||
instance,
|
||||
registryType,
|
||||
registryImage,
|
||||
registryImagePullPolicy,
|
||||
registryMemoryLimit,
|
||||
registryMemoryRequest,
|
||||
)
|
||||
logrus.Infof("Updating %s registry deployment with an image %s", registryType, registryImage)
|
||||
if err := controllerutil.SetControllerReference(instance, newDeployment, r.scheme); err != nil {
|
||||
logrus.Errorf("An error occurred: %s", err)
|
||||
}
|
||||
if err := r.client.Update(context.TODO(), newDeployment); err != nil {
|
||||
logrus.Errorf("Failed to update %s registry deployment: %s", registryType, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Create Plugin registry resources unless an external registry is used
|
||||
externalPluginRegistry := instance.Spec.Server.ExternalPluginRegistry
|
||||
if !externalPluginRegistry {
|
||||
pluginRegistryURL, err := addRegistryRoute("plugin")
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
if cheFlavor != "codeready" {
|
||||
pluginRegistryURL += "/v3"
|
||||
}
|
||||
instance.Status.PluginRegistryURL = pluginRegistryURL
|
||||
if err := r.UpdateCheCRStatus(instance, "status: Plugin Registry URL", pluginRegistryURL); err != nil {
|
||||
instance, _ = r.GetCR(request)
|
||||
return reconcile.Result{Requeue: true, RequeueAfter: time.Second * 1}, err
|
||||
}
|
||||
|
||||
result, err := addRegistryDeployment(
|
||||
"plugin",
|
||||
util.GetValue(instance.Spec.Server.PluginRegistryImage, deploy.DefaultPluginRegistryImage),
|
||||
corev1.PullPolicy(util.GetValue(string(instance.Spec.Server.PluginRegistryImagePullPolicy), deploy.DefaultPluginRegistryPullPolicy)),
|
||||
util.GetValue(string(instance.Spec.Server.PluginRegistryMemoryLimit), deploy.DefaultPluginRegistryMemoryLimit),
|
||||
util.GetValue(string(instance.Spec.Server.PluginRegistryMemoryRequest), deploy.DefaultPluginRegistryMemoryRequest),
|
||||
)
|
||||
if err != nil || result != nil {
|
||||
return *result, err
|
||||
}
|
||||
}
|
||||
|
||||
// Create devfile registry resources unless an external registry is used
|
||||
externalDevfileRegistry := instance.Spec.Server.ExternalDevfileRegistry
|
||||
if !externalDevfileRegistry {
|
||||
devfileRegistryURL, err := addRegistryRoute("devfile")
|
||||
if err != nil {
|
||||
return reconcile.Result{}, err
|
||||
}
|
||||
instance.Status.DevfileRegistryURL = devfileRegistryURL
|
||||
if err := r.UpdateCheCRStatus(instance, "status: Devfile Registry URL", devfileRegistryURL); err != nil {
|
||||
instance, _ = r.GetCR(request)
|
||||
return reconcile.Result{Requeue: true, RequeueAfter: time.Second * 1}, err
|
||||
}
|
||||
|
||||
result, err := addRegistryDeployment(
|
||||
"devfile",
|
||||
util.GetValue(instance.Spec.Server.DevfileRegistryImage, deploy.DefaultDevfileRegistryImage),
|
||||
corev1.PullPolicy(util.GetValue(string(instance.Spec.Server.DevfileRegistryImagePullPolicy), deploy.DefaultDevfileRegistryPullPolicy)),
|
||||
util.GetValue(string(instance.Spec.Server.DevfileRegistryMemoryLimit), deploy.DefaultDevfileRegistryMemoryLimit),
|
||||
util.GetValue(string(instance.Spec.Server.DevfileRegistryMemoryRequest), deploy.DefaultDevfileRegistryMemoryRequest),
|
||||
)
|
||||
if err != nil || result != nil {
|
||||
return *result, err
|
||||
}
|
||||
}
|
||||
|
||||
// create Che service and route
|
||||
cheLabels := deploy.GetLabels(instance, util.GetValue(instance.Spec.Server.CheFlavor, deploy.DefaultCheFlavor))
|
||||
|
||||
|
|
|
|||
|
|
@ -470,17 +470,7 @@ func (r *ReconcileChe) GenerateAndSaveFields(instance *orgv1.CheCluster, request
|
|||
return err
|
||||
}
|
||||
}
|
||||
pluginRegistryUrl := util.GetValue(instance.Spec.Server.PluginRegistryUrl, deploy.DefaultUpstreamPluginRegistryUrl)
|
||||
if cheFlavor == "codeready" {
|
||||
pluginRegistryUrl = deploy.DefaultPluginRegistryUrl
|
||||
}
|
||||
|
||||
if len(instance.Spec.Server.PluginRegistryUrl) < 1 {
|
||||
instance.Spec.Server.PluginRegistryUrl = pluginRegistryUrl
|
||||
if err := r.UpdateCheCRSpec(instance, "plugin registry URL", pluginRegistryUrl); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
cheLogLevel := util.GetValue(instance.Spec.Server.CheLogLevel, deploy.DefaultCheLogLevel)
|
||||
if len(instance.Spec.Server.CheLogLevel) < 1 {
|
||||
instance.Spec.Server.CheLogLevel = cheLogLevel
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ type CheConfigMap struct {
|
|||
WorkspaceHttpProxy string `json:"CHE_WORKSPACE_HTTP__PROXY"`
|
||||
WorkspaceHttpsProxy string `json:"CHE_WORKSPACE_HTTPS__PROXY"`
|
||||
WorkspaceNoProxy string `json:"CHE_WORKSPACE_NO__PROXY"`
|
||||
PluginRegistryUrl string `json:"CHE_WORKSPACE_PLUGIN__REGISTRY__URL"`
|
||||
DevfileRegistryUrl string `json:"CHE_WORKSPACE_DEVFILE__REGISTRY__URL"`
|
||||
PluginRegistryUrl string `json:"CHE_WORKSPACE_PLUGIN__REGISTRY__URL,omitempty"`
|
||||
DevfileRegistryUrl string `json:"CHE_WORKSPACE_DEVFILE__REGISTRY__URL,omitempty"`
|
||||
WebSocketEndpointMinor string `json:"CHE_WEBSOCKET_ENDPOINT__MINOR"`
|
||||
}
|
||||
|
||||
|
|
@ -156,8 +156,11 @@ func GetConfigMapData(cr *orgv1.CheCluster) (cheEnv map[string]string) {
|
|||
keycloakClientId := util.GetValue(cr.Spec.Auth.KeycloakClientId, cheFlavor+"-public")
|
||||
ingressStrategy := util.GetValue(cr.Spec.K8SOnly.IngressStrategy, DefaultIngressStrategy)
|
||||
ingressClass := util.GetValue(cr.Spec.K8SOnly.IngressClass, DefaultIngressClass)
|
||||
devfileRegistryUrl := util.GetValue(cr.Spec.Server.DevfileRegistryUrl, DefaultDevfileRegistryUrl)
|
||||
pluginRegistryUrl := util.GetValue(cr.Spec.Server.PluginRegistryUrl, DefaultPluginRegistryUrl)
|
||||
devfileRegistryUrl := cr.Status.DevfileRegistryURL
|
||||
pluginRegistryUrl := cr.Status.PluginRegistryURL
|
||||
if pluginRegistryUrl == "" && cheFlavor == "codeready" {
|
||||
pluginRegistryUrl = DefaultCodereadyPluginRegistryUrl
|
||||
}
|
||||
cheLogLevel := util.GetValue(cr.Spec.Server.CheLogLevel, DefaultCheLogLevel)
|
||||
cheDebug := util.GetValue(cr.Spec.Server.CheDebug, DefaultCheDebug)
|
||||
|
||||
|
|
|
|||
|
|
@ -13,32 +13,38 @@
|
|||
package deploy
|
||||
|
||||
const (
|
||||
DefaultCheServerImageRepo = "eclipse/che-server"
|
||||
DefaultCodeReadyServerImageRepo = "registry.redhat.io/codeready-workspaces/server-rhel8"
|
||||
DefaultCheServerImageTag = "7.0.0-RC-2.0"
|
||||
DefaultCodeReadyServerImageTag = "1.2"
|
||||
DefaultCheFlavor = "che"
|
||||
DefaultChePostgresUser = "pgche"
|
||||
DefaultChePostgresHostName = "postgres"
|
||||
DefaultChePostgresPort = "5432"
|
||||
DefaultChePostgresDb = "dbche"
|
||||
DefaultPvcStrategy = "common"
|
||||
DefaultPvcClaimSize = "1Gi"
|
||||
DefaultIngressStrategy = "multi-host"
|
||||
DefaultIngressClass = "nginx"
|
||||
DefaultPluginRegistryUrl = "https://che-plugin-registry.openshift.io"
|
||||
DefaultUpstreamPluginRegistryUrl = "https://che-plugin-registry.openshift.io/v3"
|
||||
DefaultDevfileRegistryUrl = "https://che-devfile-registry.openshift.io"
|
||||
DefaultKeycloakAdminUserName = "admin"
|
||||
DefaultCheLogLevel = "INFO"
|
||||
DefaultCheDebug = "false"
|
||||
DefaultPvcJobsImage = "registry.redhat.io/ubi8-minimal:8.0-127"
|
||||
DefaultPvcJobsUpstreamImage = "registry.access.redhat.com/ubi8-minimal:8.0-127"
|
||||
DefaultPostgresImage = "registry.redhat.io/rhscl/postgresql-96-rhel7:1-40"
|
||||
DefaultPostgresUpstreamImage = "centos/postgresql-96-centos7:9.6"
|
||||
DefaultKeycloakImage = "registry.redhat.io/redhat-sso-7/sso73-openshift:1.0-11"
|
||||
DefaultKeycloakUpstreamImage = "eclipse/che-keycloak:7.0.0-RC-2.0"
|
||||
DefaultJavaOpts = "-XX:MaxRAMFraction=2 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 " +
|
||||
DefaultCheServerImageRepo = "eclipse/che-server"
|
||||
DefaultCodeReadyServerImageRepo = "registry.redhat.io/codeready-workspaces/server-rhel8"
|
||||
DefaultCheServerImageTag = "7.0.0-RC-2.0"
|
||||
DefaultCodeReadyServerImageTag = "1.2"
|
||||
DefaultCheFlavor = "che"
|
||||
DefaultChePostgresUser = "pgche"
|
||||
DefaultChePostgresHostName = "postgres"
|
||||
DefaultChePostgresPort = "5432"
|
||||
DefaultChePostgresDb = "dbche"
|
||||
DefaultPvcStrategy = "common"
|
||||
DefaultPvcClaimSize = "1Gi"
|
||||
DefaultIngressStrategy = "multi-host"
|
||||
DefaultIngressClass = "nginx"
|
||||
DefaultPluginRegistryImage = "quay.io/eclipse/che-plugin-registry:7.0.0-RC-2.0"
|
||||
DefaultPluginRegistryPullPolicy = "Always"
|
||||
DefaultPluginRegistryMemoryLimit = "32Mi"
|
||||
DefaultPluginRegistryMemoryRequest = "16Mi"
|
||||
DefaultCodereadyPluginRegistryUrl = "https://che-plugin-registry.openshift.io"
|
||||
DefaultDevfileRegistryImage = "quay.io/eclipse/che-devfile-registry:7.0.0-RC-2.0"
|
||||
DefaultDevfileRegistryPullPolicy = "Always"
|
||||
DefaultDevfileRegistryMemoryLimit = "32Mi"
|
||||
DefaultDevfileRegistryMemoryRequest = "16Mi"
|
||||
DefaultKeycloakAdminUserName = "admin"
|
||||
DefaultCheLogLevel = "INFO"
|
||||
DefaultCheDebug = "false"
|
||||
DefaultPvcJobsImage = "registry.redhat.io/ubi8-minimal:8.0-127"
|
||||
DefaultPvcJobsUpstreamImage = "registry.access.redhat.com/ubi8-minimal:8.0-127"
|
||||
DefaultPostgresImage = "registry.redhat.io/rhscl/postgresql-96-rhel7:1-40"
|
||||
DefaultPostgresUpstreamImage = "centos/postgresql-96-centos7:9.6"
|
||||
DefaultKeycloakImage = "registry.redhat.io/redhat-sso-7/sso73-openshift:1.0-11"
|
||||
DefaultKeycloakUpstreamImage = "eclipse/che-keycloak:7.0.0-RC-2.0"
|
||||
DefaultJavaOpts = "-XX:MaxRAMFraction=2 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 " +
|
||||
"-XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 " +
|
||||
"-XX:AdaptiveSizePolicyWeight=90 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap " +
|
||||
"-Dsun.zip.disableMemoryMapping=true -Xms20m"
|
||||
|
|
@ -46,8 +52,8 @@ const (
|
|||
"-XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 " +
|
||||
"-Dsun.zip.disableMemoryMapping=true " +
|
||||
"-Xms20m -Djava.security.egd=file:/dev/./urandom"
|
||||
DefaultServerMemoryRequest = "512Mi"
|
||||
DefaultServerMemoryLimit = "1Gi"
|
||||
DefaultSecurityContextFsGroup = "1724"
|
||||
DefaultSecurityContextRunAsUser = "1724"
|
||||
DefaultServerMemoryRequest = "512Mi"
|
||||
DefaultServerMemoryLimit = "1Gi"
|
||||
DefaultSecurityContextFsGroup = "1724"
|
||||
DefaultSecurityContextRunAsUser = "1724"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
//
|
||||
// Copyright (c) 2012-2019 Red Hat, Inc.
|
||||
// This program and the accompanying materials are made
|
||||
// available under the terms of the Eclipse Public License 2.0
|
||||
// which is available at https://www.eclipse.org/legal/epl-2.0/
|
||||
//
|
||||
// SPDX-License-Identifier: EPL-2.0
|
||||
//
|
||||
// Contributors:
|
||||
// Red Hat, Inc. - initial API and implementation
|
||||
//
|
||||
package deploy
|
||||
|
||||
import (
|
||||
orgv1 "github.com/eclipse/che-operator/pkg/apis/org/v1"
|
||||
appsv1 "k8s.io/api/apps/v1"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
)
|
||||
|
||||
func NewRegistryDeployment(
|
||||
cr *orgv1.CheCluster,
|
||||
registryType string,
|
||||
registryImage string,
|
||||
registryImagePullPolicy corev1.PullPolicy,
|
||||
registryMemoryLimit string,
|
||||
registryMemoryRequest string,
|
||||
) *appsv1.Deployment {
|
||||
name := "che-" + registryType + "-registry"
|
||||
labels := GetLabels(cr, name)
|
||||
_25Percent := intstr.FromString("25%")
|
||||
_1 := int32(1)
|
||||
_2 := int32(2)
|
||||
return &appsv1.Deployment{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "Deployment",
|
||||
APIVersion: "apps/v1",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
Namespace: cr.Namespace,
|
||||
Labels: labels,
|
||||
},
|
||||
Spec: appsv1.DeploymentSpec{
|
||||
Replicas: &_1,
|
||||
RevisionHistoryLimit: &_2,
|
||||
Selector: &metav1.LabelSelector{MatchLabels: labels},
|
||||
Strategy: appsv1.DeploymentStrategy{
|
||||
Type: appsv1.RollingUpdateDeploymentStrategyType,
|
||||
RollingUpdate: &appsv1.RollingUpdateDeployment {
|
||||
MaxSurge: &_25Percent,
|
||||
MaxUnavailable: &_25Percent,
|
||||
},
|
||||
},
|
||||
Template: corev1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Labels: labels,
|
||||
},
|
||||
Spec: corev1.PodSpec{
|
||||
Containers: []corev1.Container{
|
||||
{
|
||||
Name: name,
|
||||
Image: registryImage,
|
||||
ImagePullPolicy: registryImagePullPolicy,
|
||||
Ports: []corev1.ContainerPort{
|
||||
{
|
||||
Name: "http",
|
||||
ContainerPort: 8080,
|
||||
Protocol: "TCP",
|
||||
},
|
||||
},
|
||||
Resources: corev1.ResourceRequirements{
|
||||
Requests: corev1.ResourceList{
|
||||
corev1.ResourceMemory: resource.MustParse(registryMemoryRequest),
|
||||
},
|
||||
Limits: corev1.ResourceList{
|
||||
corev1.ResourceMemory: resource.MustParse(registryMemoryLimit),
|
||||
},
|
||||
},
|
||||
ReadinessProbe: &corev1.Probe{
|
||||
Handler: corev1.Handler{
|
||||
HTTPGet: &corev1.HTTPGetAction{
|
||||
Path: "/" + registryType + "s/",
|
||||
Port: intstr.IntOrString{
|
||||
Type: intstr.Int,
|
||||
IntVal: int32(8080),
|
||||
},
|
||||
Scheme: corev1.URISchemeHTTP,
|
||||
},
|
||||
},
|
||||
InitialDelaySeconds: 3,
|
||||
FailureThreshold: 10,
|
||||
TimeoutSeconds: 3,
|
||||
},
|
||||
LivenessProbe: &corev1.Probe{
|
||||
Handler: corev1.Handler{
|
||||
HTTPGet: &corev1.HTTPGetAction{
|
||||
Path: "/" + registryType + "s/",
|
||||
Port: intstr.IntOrString{
|
||||
Type: intstr.Int,
|
||||
IntVal: int32(8080),
|
||||
},
|
||||
Scheme: corev1.URISchemeHTTP,
|
||||
},
|
||||
},
|
||||
InitialDelaySeconds: 30,
|
||||
FailureThreshold: 10,
|
||||
TimeoutSeconds: 3,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -27,11 +27,8 @@ func NewIngress(cr *orgv1.CheCluster, name string, serviceName string, port int)
|
|||
}
|
||||
ingressDomain := cr.Spec.K8SOnly.IngressDomain
|
||||
ingressClass := util.GetValue(cr.Spec.K8SOnly.IngressClass, DefaultIngressClass)
|
||||
labels := GetLabels(cr, util.GetValue(cr.Spec.Server.CheFlavor, DefaultCheFlavor))
|
||||
labels := GetLabels(cr, name)
|
||||
tlsSecretName := cr.Spec.K8SOnly.TlsSecretName
|
||||
if name == "keycloak" {
|
||||
labels = GetLabels(cr, name)
|
||||
}
|
||||
tls := "false"
|
||||
if tlsSupport {
|
||||
tls = "true"
|
||||
|
|
|
|||
|
|
@ -30,21 +30,27 @@ cd "${BASE_DIR}"
|
|||
echo
|
||||
echo "## Creating release '${RELEASE}' of the Che operator docker image"
|
||||
|
||||
DefaultPluginRegistryImage
|
||||
|
||||
lastDefaultCheVersion=$(grep 'DefaultCheServerImageTag' "pkg/deploy/defaults.go" | sed -e 's/.*DefaultCheServerImageTag *= *"\([^"]*\)"/\1/')
|
||||
lastDefaultKeycloakVersion=$(grep 'DefaultKeycloakUpstreamImage' "pkg/deploy/defaults.go" | sed -e 's/.*DefaultKeycloakUpstreamImage *= *"[^":]*:\([^"]*\)"/\1/')
|
||||
lastDefaultPluginRegistryVersion=$(grep 'DefaultPluginRegistryImage' "pkg/deploy/defaults.go" | sed -e 's/.*DefaultPluginRegistryImage *= *"[^":]*:\([^"]*\)"/\1/')
|
||||
lastDefaultDevfileRegistryVersion=$(grep 'DefaultDevfileRegistryImage' "pkg/deploy/defaults.go" | sed -e 's/.*DefaultDevfileRegistryImage *= *"[^":]*:\([^"]*\)"/\1/')
|
||||
if [ "${lastDefaultCheVersion}" != "${lastDefaultKeycloakVersion}" ]
|
||||
then
|
||||
echo "#### ERROR ####"
|
||||
echo "Current default Che version: ${lastDefaultCheVersion}"
|
||||
echo "Current default Keycloak version: ${lastDefaultKeycloakVersion}"
|
||||
echo "Current default version for Che and keycloak are not the same in file 'pkg/deploy/defaults.go'."
|
||||
echo "Current default Devfile Registry version: ${lastDefaultDevfileRegistryVersion}"
|
||||
echo "Current default Plugin Registry version: ${lastDefaultPluginRegistryVersion}"
|
||||
echo "Current default version for various Che containers are not the same in file 'pkg/deploy/defaults.go'."
|
||||
echo "Please fix that manually first !"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
lastDefaultVersion="${lastDefaultCheVersion}"
|
||||
echo " - Current default Che and Keycloak version: ${lastDefaultVersion}"
|
||||
echo " - New version to apply as default Che and Keycloak version: ${RELEASE}"
|
||||
echo " - Current default version of Che containers: ${lastDefaultVersion}"
|
||||
echo " - New version to apply as default version for Che containers: ${RELEASE}"
|
||||
if [ "${lastDefaultVersion}" == "${RELEASE}" ]
|
||||
then
|
||||
echo "Release ${RELEASE} already exists as the default in the Operator Go code !"
|
||||
|
|
@ -56,6 +62,8 @@ echo " => will update default Eclipse Che Keycloak docker image tags from '$
|
|||
sed \
|
||||
-e "s/\(.*DefaultCheServerImageTag *= *\"\)[^\"]*\"/\1${RELEASE}\"/" \
|
||||
-e "s/\(.*DefaultKeycloakUpstreamImage *= *\"[^\":]*:\)[^\"]*\"/\1${RELEASE}\"/" \
|
||||
-e "s/\(.*DefaultPluginRegistryImage *= *\"[^\":]*:\)[^\"]*\"/\1${RELEASE}\"/" \
|
||||
-e "s/\(.*DefaultDevfileRegistryImage *= *\"[^\":]*:\)[^\"]*\"/\1${RELEASE}\"/" \
|
||||
pkg/deploy/defaults.go \
|
||||
> pkg/deploy/defaults.go.new
|
||||
mv pkg/deploy/defaults.go.new pkg/deploy/defaults.go
|
||||
|
|
|
|||
Loading…
Reference in New Issue