관리 가이드


Red Hat OpenShift Dev Spaces 3.5

Administering Red Hat OpenShift Dev Spaces 3.5

초록


1장.

1.1.

추가 리소스

1.2. 아키텍처

그림 1.1.

1.2.1.

그림 1.2.

1.2.1.1.

추가 리소스

1.2.1.2.

추가 리소스

1.2.1.3. 게이트웨이

그림 1.3.

추가 리소스

1.2.1.4.

그림 1.4.

1.2.1.5.

추가 리소스

그림 1.5.

추가 리소스

1.2.1.6.

그림 1.6.

추가 리소스

1.2.1.7. PostgreSQL

그림 1.7.

1.2.1.8.

그림 1.8.

추가 리소스

1.2.2.

그림 1.9.

  • 컨테이너
  • ConfigMaps
  • 서비스
  • 보안

그림 1.10.

1.3.

절차

  1. Expand
    표 1.1.
    목적Pod 메모리 제한메모리 요청  

         

    합계

        
  2. Expand
    표 1.2.
    목적Pod 메모리 제한메모리 요청  

    universal-developer-image

    256 MiB

    500 m

    che-code

    32 MiB

    500 m

    che-gateway

    256 Mi

    64 Mi

    500 m

    50 m

    합계

    480 MiB

    1.5

    110 m

  3. Expand
    표 1.3.
    목적Pod 이름 메모리 제한메모리 요청  

    devspaces-operator

    devspaces-operator

    256 MiB

    500 m

    100 m

    OpenShift Dev Spaces Server

    devspaces-server

    512 MiB

    1

    1 m

    devspaces-dashboard

    • devspaces-dashboard

    256 MiB

    32 MiB

    500 m

    100 m

    OpenShift Dev Spaces Gateway

    devspaces-gateway

    traefik

    4GiB

    1

    100 m

    OpenShift Dev Spaces Gateway

    devspaces-gateway

    configbump

    256 MiB

    500 m

    50 m

    OpenShift Dev Spaces Gateway

    devspaces-gateway

    oauth-proxy

    512 MiB

    500 m

    100 m

    OpenShift Dev Spaces Gateway

    devspaces-gateway

    kube-rbac-proxy

    512 MiB

    500 m

    100 m

    devfile-registry

    devfile-registry

    256 Mi

    32 Mi

    500 m

    100 m

    plugin-registry

    plugin-registry

    256 Mi

    32 Mi

    500 m

    100 m

    PostgreSQL 데이터베이스

    postgres

    postgres

    512 Mi

    500 m

    100 m

    devworkspace-controller-manager

    devworkspace-controller

    100 MiB

    1

    250 m

    devworkspace-controller-manager

    kube-rbac-proxy

    해당 없음

    해당 없음

    해당 없음

    해당 없음

    devworkspace-webhook-server

    webhook-server

    300 MiB

    29 MiB

    200 m

    100 m

     

    registry-server

    해당 없음

    50 MiB

    해당 없음

    10 m

    devworkspace-webhook-server

    webhook-server

    300 MiB

    20 MiB

    200 m

    100 m

    devworkspace-webhook-server

    kube-rbac-proxy

    해당 없음

    해당 없음

    해당 없음

    해당 없음

    합계

    7.4

    2.31

2장.

2.1.

절차

검증

  • $ dsc
    Copy to Clipboard Toggle word wrap

추가 리소스

2.2.

사전 요구 사항

  • OpenShift Container Platform
  • dsc.

절차

  1. $ dsc server:delete
    Copy to Clipboard Toggle word wrap
  2. $ dsc server:deploy --platform openshift
    Copy to Clipboard Toggle word wrap

검증 단계

  1. $ dsc server:status
    Copy to Clipboard Toggle word wrap
  2. $ dsc dashboard:open
    Copy to Clipboard Toggle word wrap

2.3.

사전 요구 사항

절차

  1. $ dsc server:delete
    Copy to Clipboard Toggle word wrap
  2. oc create namespace openshift-devspaces
    Copy to Clipboard Toggle word wrap
  3. 생성을 선택합니다.

검증

2.4.

사전 요구 사항

절차

  1. $ bash prepare-restricted-environment.sh \
      --ocp_ver "4.11" \
      --devworkspace_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \
      --devworkspace_operator_version "v0.18.1" \
      --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \
      --prod_operator_package_name "devspaces-operator" \
      --prod_operator_version "v3.5.0" \
      --my_registry "<my_registry>" \
      --my_catalog "<my_catalog>"
    Copy to Clipboard Toggle word wrap
  2. $ dsc server:deploy --platform=openshift \
      --che-operator-cr-patch-yaml=che-operator-cr-patch.yaml
    Copy to Clipboard Toggle word wrap

3장.

3.1.

예 3.1.

추가 리소스

3.1.1.

사전 요구 사항

  • dsc.

절차

  • spec:
      <component>:
          <property_to_configure>: <value>
    Copy to Clipboard Toggle word wrap
  • $ dsc server:deploy \
    --che-operator-cr-patch-yaml=che-operator-cr-patch.yaml \
    --platform <chosen_platform>
    Copy to Clipboard Toggle word wrap

검증

  1. $ oc get configmap che -o jsonpath='{.data.<configured_property>}' \
    -n openshift-devspaces
    Copy to Clipboard Toggle word wrap

3.1.2.

사전 요구 사항

절차

  1. $ oc edit checluster/devspaces -n openshift-devspaces
    Copy to Clipboard Toggle word wrap

검증

  1. $ oc get configmap che -o jsonpath='{.data.<configured_property>}' \
    -n openshift-devspaces
    Copy to Clipboard Toggle word wrap

3.1.3.

예 3.2.

apiVersion: org.eclipse.che/v2
kind: CheCluster
metadata:
  name: devspaces
spec:
  devEnvironments:
    defaultNamespace:
      template: '<username>-che'
    storage:
      pvcStrategy: 'common'
  components:
    database:
      externalDb: false
    metrics:
      enable: true
Copy to Clipboard Toggle word wrap
Expand
표 3.1.
 설명

containerBuildConfiguration

defaultComponents

defaultEditor

defaultNamespace

defaultPlugins

disableContainerBuildCapabilities

maxNumberOfRunningWorkspacesPerUser

maxNumberOfWorkspacesPerUser

nodeSelector

podSchedulerName

secondsOfInactivityBeforeIdling

secondsOfRunBeforeIdling

serviceAccount

startTimeoutSeconds

storage

허용 오차

trustedCerts

Expand
표 3.2.
 설명

autoProvision

template

Expand
표 3.3.
 설명

perUserStrategyPvcConfig

perWorkspaceStrategyPvcConfig

pvcStrategy

Expand
표 3.4.
 설명

cheServer

devWorkspace

devfileRegistry

imagePuller

pluginRegistry

Expand
표 3.5.
 설명

runningLimit

Expand
표 3.6.
 설명

clusterRoles

debug

Deployment

extraProperties

logLevel

proxy

Expand
표 3.7.
 설명

Deployment

disableInternalRegistry

externalPluginRegistries

openVSXURL

Expand
표 3.8.
 설명

Deployment

disableInternalRegistry

externalDevfileRegistries

Expand
표 3.9.
 설명

credentialsSecretName

Deployment

externalDb

postgresDb

postgresHostName

postgresPort

pvc

Expand
표 3.10.
 설명

Deployment

headerMessage

Expand
표 3.11.
 설명

spec

Expand
표 3.12.
 설명

Expand
표 3.13.
 설명

annotations

auth

domain

hostname

labels

tlsSecretName

Expand
표 3.14.
 설명

hostname

Expand
표 3.15.
 설명

chePhase

cheURL

cheVersion

devfileRegistryURL

gatewayPhase

message

pluginRegistryURL

postgresVersion

reason

workspaceBaseDomain

3.2.

3.2.1.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      components:
        devEnvironments:
          defaultNamespace:
            template: <workspace_namespace_template_>
    Copy to Clipboard Toggle word wrap

    예 3.3.

    Expand
      

    user1-devspaces

    <userid>-namespace

    cge1egvsb2nhba-namespace-ul1411

    <userid>-aka-<username>-namespace

    cgezegvsb2nhba-aka-user1-namespace-6m2w2b

3.2.2.

절차

  • kind: Namespace
    apiVersion: v1
    metadata:
      name: <project_name> 
    1
    
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: workspaces-namespace
      annotations:
        che.eclipse.org/username: <username>
    Copy to Clipboard Toggle word wrap
    1

3.3.

3.3.1.

  • 암호

3.3.1.1.

사전 요구 사항

절차

    • app.kubernetes.io/part-of: che.eclipse.org
      • postgres
      • keycloak
      • devfile-registry
      • plugin-registry
      • 또는

      • configmap

예 3.4. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-settings
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
...
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-settings
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
...
Copy to Clipboard Toggle word wrap

예 3.5. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-data
  annotations:
    che.eclipse.org/mount-as: file
    che.eclipse.org/mount-path: /data
  labels:
...
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-data
  annotations:
    che.eclipse.org/mount-as: file
    che.eclipse.org/mount-path: /data
  labels:
...
Copy to Clipboard Toggle word wrap

예 3.6. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-data
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
  annotations:
    che.eclipse.org/mount-as: file
    che.eclipse.org/mount-path: /data
data:
  ca.crt: <base64 encoded data content here>
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-data
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
  annotations:
    che.eclipse.org/mount-as: file
    che.eclipse.org/mount-path: /data
data:
  ca.crt: <data content here>
Copy to Clipboard Toggle word wrap

중요

3.3.1.2.

사전 요구 사항

절차

    • app.kubernetes.io/part-of: che.eclipse.org
      • postgres
      • keycloak
      • devfile-registry
      • plugin-registry
      • 또는

      • configmap

예 3.7. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-settings
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-secret
...
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-settings
  labels:
    app.kubernetes.io/part-of: che.eclipse.org
    app.kubernetes.io/component: devspaces-configmap
...
Copy to Clipboard Toggle word wrap

예 3.8. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-settings
  annotations:
    che.eclipse.org/env-name: FOO_ENV
    che.eclipse.org/mount-as: env
  labels:
   ...
data:
  mykey: myvalue
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-settings
  annotations:
    che.eclipse.org/env-name: FOO_ENV
    che.eclipse.org/mount-as: env
  labels:
   ...
data:
  mykey: myvalue
Copy to Clipboard Toggle word wrap

  • FOO_ENV
  • myvalue

예 3.9. 예제:

apiVersion: v1
kind: Secret
metadata:
  name: custom-settings
  annotations:
    che.eclipse.org/mount-as: env
    che.eclipse.org/mykey_env-name: FOO_ENV
    che.eclipse.org/otherkey_env-name: OTHER_ENV
  labels:
   ...
data:
  mykey: __<base64 encoded data content here>__
  otherkey: __<base64 encoded data content here>__
Copy to Clipboard Toggle word wrap

또는

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-settings
  annotations:
    che.eclipse.org/mount-as: env
    che.eclipse.org/mykey_env-name: FOO_ENV
    che.eclipse.org/otherkey_env-name: OTHER_ENV
  labels:
   ...
data:
  mykey: __<data content here>__
  otherkey: __<data content here>__
Copy to Clipboard Toggle word wrap

  • FOO_ENV
  • OTHER_ENV

참고

중요

3.3.2.

3.3.2.1.

예 3.10.

  • 3.1.2절. “”을 참조하십시오.

    apiVersion: org.eclipse.che/v2
    kind: CheCluster
    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGS_APPENDERS_IMPL: json
    Copy to Clipboard Toggle word wrap
참고

추가 리소스

3.4.

3.4.1.

spec:
  devEnvironments:
    maxNumberOfWorkspacesPerUser: <kept_workspaces_limit>
1
Copy to Clipboard Toggle word wrap
1

절차

  1. $ oc get checluster --all-namespaces \
      -o=jsonpath="{.items[*].metadata.namespace}"
    Copy to Clipboard Toggle word wrap
  2. $ oc patch checluster/devspaces -n openshift-devspaces \
    1
    
    --type='merge' -p \
    '{"spec":{"devEnvironments":{"maxNumberOfWorkspacesPerUser": <kept_workspaces_limit>}}}'
    2
    Copy to Clipboard Toggle word wrap
    1
    2

추가 리소스

3.4.2.

참고

spec:
  devEnvironments:
    maxNumberOfRunningWorkspacesPerUser: <running_workspaces_limit>
1
Copy to Clipboard Toggle word wrap
1
기본값은 1 입니다.

절차

  1. $ oc get checluster --all-namespaces \
      -o=jsonpath="{.items[*].metadata.namespace}"
    Copy to Clipboard Toggle word wrap
  2. $ oc patch checluster/devspaces -n openshift-devspaces \
    1
    
    --type='merge' -p \
    '{"spec":{"devEnvironments":{"maxNumberOfRunningWorkspacesPerUser": <running_workspaces_limit>}}}'
    2
    Copy to Clipboard Toggle word wrap
    1
    2

추가 리소스

3.4.3.

사전 요구 사항

절차

  1. $ oc create configmap che-git-self-signed-cert \
      --from-file=ca.crt=<path_to_certificate> \  
    1
    
      --from-literal=githost=<host:port> -n openshift-devspaces  
    2
    Copy to Clipboard Toggle word wrap
    1
    2
    참고
    • .pem, .crt, .ca-bundle.
  2. $ oc label configmap che-git-self-signed-cert \
      app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
    Copy to Clipboard Toggle word wrap
  3. 3.1.2절. “”을 참조하십시오.

    spec:
      devEnvironments:
        trustedCerts:
          gitTrustedCertsConfigMapName: che-git-self-signed-cert
    Copy to Clipboard Toggle word wrap

검증 단계

  • 예 3.11.

    [http "https://10.33.177.118:3000"]
    sslCAInfo = /etc/config/che-git-tls-creds/certificate
    Copy to Clipboard Toggle word wrap

3.4.4.

절차

CHE_WORKSPACE_POD_NODE__SELECTOR=disktype=ssd,cpu=xlarge,[key=value]
Copy to Clipboard Toggle word wrap
중요

3.4.5.

절차

  • spec:
       components:
    # [...]
         pluginRegistry:
           openVSXRegistryURL: <your_open_vsx_registy>
    # [...]
    Copy to Clipboard Toggle word wrap

추가 리소스

3.5.

Expand
표 3.16.
매개변수사용법Default

CACHING_INTERVAL_HOURS

"1"

CACHING_MEMORY_REQUEST

3.5.2절. “”을 참조하십시오.

10Mi

CACHING_MEMORY_LIMIT

3.5.2절. “”을 참조하십시오.

20Mi

CACHING_CPU_REQUEST

CACHING_CPU_LIMIT

DAEMONSET_NAME

kubernetes-image-puller

DEPLOYMENT_NAME

kubernetes-image-puller

NAMESPACE

k8s-image-puller

IMAGES

3.5.1절. “”을 참조하십시오.

 

NODE_SELECTOR

'{}'

'{}'

IMAGE_PULL_SECRETS

""

3.5.1.

절차

3.5.2.

사전 요구 사항

절차

  1. (memory limit) * (number of images) * (number of nodes in the cluster)
    Copy to Clipboard Toggle word wrap

3.5.3.

사전 요구 사항

절차

3.5.4.

사전 요구 사항

절차

  1. $ git clone https://github.com/che-incubator/kubernetes-image-puller
    $ cd kubernetes-image-puller/deploy/openshift
    Copy to Clipboard Toggle word wrap
  2. Expand
    표 3.17.
    현재의사용법Default

    DEPLOYMENT_NAME

    kubernetes-image-puller

    IMAGE

    registry.redhat.io/devspaces/imagepuller-rhel8:3.5

    IMAGE_TAG

    latest

    SERVICEACCOUNT_NAME

    kubernetes-image-puller

    Expand
    표 3.18.
    현재의사용법Default

    CACHING_CPU_LIMIT

    .2

    CACHING_CPU_REQUEST

    .05

    CACHING_INTERVAL_HOURS

    "1"

    CACHING_MEMORY_LIMIT

    "20Mi"

    CACHING_MEMORY_REQUEST

    "10Mi"

    DAEMONSET_NAME

    kubernetes-image-puller

    DEPLOYMENT_NAME

    kubernetes-image-puller

    IMAGES

    "undefined"

    NAMESPACE

    k8s-image-puller

    NODE_SELECTOR

    "{}"

    Expand
    표 3.19.
    현재의사용법Default

    SERVICEACCOUNT_NAME

    kubernetes-image-puller

  3. $ oc new-project <k8s-image-puller>
    Copy to Clipboard Toggle word wrap
  4. $ oc process -f serviceaccount.yaml | oc apply -f -
    $ oc process -f configmap.yaml | oc apply -f -
    $ oc process -f app.yaml | oc apply -f -
    Copy to Clipboard Toggle word wrap

검증 단계

  1. $ oc get deployment,daemonset,pod --namespace <k8s-image-puller>
    Copy to Clipboard Toggle word wrap
  2. $ oc get configmap <kubernetes-image-puller> --output yaml
    Copy to Clipboard Toggle word wrap

3.6.

3.6.1.

3.6.1.1.

3.6.1.2. 사용 사례

3.6.1.3.

3.6.1.4.
Expand
이벤트설명

WORKSPACE_OPENED

COMMIT_LOCALLY

PUSH_TO_REMOTE

EDITOR_USED

3.6.1.5.

절차

    1. 3.1.2절. “”을 참조하십시오.

      spec:
        devEnvironments:
          defaultPlugins:
          - editor: eclipse/che-theia/next     
      1
      
            plugins:                           
      2
      
            - 'https://your-web-server/plugin.yaml'
      Copy to Clipboard Toggle word wrap
      1
      2
3.6.1.6.

3.6.1.6.1. 시작하기

예 3.12. main.go

package main

import (
	"io/ioutil"
	"net/http"

	"go.uber.org/zap"
)

var logger *zap.SugaredLogger

func event(w http.ResponseWriter, req *http.Request) {
	switch req.Method {
	case "GET":
		logger.Info("GET /event")
	case "POST":
		logger.Info("POST /event")
	}
	body, err := req.GetBody()
	if err != nil {
		logger.With("err", err).Info("error getting body")
		return
	}
	responseBody, err := ioutil.ReadAll(body)
	if err != nil {
		logger.With("error", err).Info("error reading response body")
		return
	}
	logger.With("body", string(responseBody)).Info("got event")
}

func activity(w http.ResponseWriter, req *http.Request) {
	switch req.Method {
	case "GET":
		logger.Info("GET /activity, doing nothing")
	case "POST":
		logger.Info("POST /activity")
		body, err := req.GetBody()
		if err != nil {
			logger.With("error", err).Info("error getting body")
			return
		}
		responseBody, err := ioutil.ReadAll(body)
		if err != nil {
			logger.With("error", err).Info("error reading response body")
			return
		}
		logger.With("body", string(responseBody)).Info("got activity")
	}
}

func main() {

	log, _ := zap.NewProduction()
	logger = log.Sugar()

	http.HandleFunc("/event", event)
	http.HandleFunc("/activity", activity)
	logger.Info("Added Handlers")

	logger.Info("Starting to serve")
	http.ListenAndServe(":8080", nil)
}
Copy to Clipboard Toggle word wrap

$ git clone https://github.com/che-incubator/telemetry-server-example
$ cd telemetry-server-example
$ podman build -t registry/organization/telemetry-server-example:latest .
$ podman push registry/organization/telemetry-server-example:latest
Copy to Clipboard Toggle word wrap

$ kubectl apply -f manifest_with_[ingress|route].yaml -n openshift-devspaces
Copy to Clipboard Toggle word wrap
3.6.1.6.2.
참고

  1. mvn io.quarkus:quarkus-maven-plugin:2.7.1.Final:create \
        -DprojectGroupId=mygroup -DprojectArtifactId=devworkspace-telemetry-example-plugin \
    -DprojectVersion=1.0.0-SNAPSHOT
    Copy to Clipboard Toggle word wrap
  2. 예 3.13. pom.xml

    <!-- Required -->
    <dependency>
        <groupId>org.eclipse.che.incubator.workspace-telemetry</groupId>
        <artifactId>backend-base</artifactId>
        <version>LATEST VERSION FROM PREVIOUS STEP</version>
    </dependency>
    
    
    <!-- Used to make http requests to the telemetry server -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-rest-client</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-rest-client-jackson</artifactId>
    </dependency>
    Copy to Clipboard Toggle word wrap
  3. 예 3.14. settings.xml

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    http://maven.apache.org/xsd/settings-1.0.0.xsd">
       <servers>
          <server>
             <id>che-incubator</id>
             <username>YOUR GITHUB USERNAME</username>
             <password>YOUR GITHUB TOKEN</password>
          </server>
       </servers>
    
       <profiles>
          <profile>
             <id>github</id>
             <activation>
                <activeByDefault>true</activeByDefault>
             </activation>
             <repositories>
                <repository>
                   <id>central</id>
                   <url>https://repo1.maven.org/maven2</url>
                   <releases><enabled>true</enabled></releases>
                   <snapshots><enabled>false</enabled></snapshots>
                   </repository>
                   <repository>
                   <id>che-incubator</id>
                   <url>https://maven.pkg.github.com/che-incubator/che-workspace-telemetry-client</url>
                </repository>
             </repositories>
          </profile>
       </profiles>
    </settings>
    Copy to Clipboard Toggle word wrap
3.6.1.6.3.

예 3.15. MainConfiguration.java

package org.my.group;

import java.util.Optional;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Alternative;

import org.eclipse.che.incubator.workspace.telemetry.base.BaseConfiguration;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@Dependent
@Alternative
public class MainConfiguration extends BaseConfiguration {
    @ConfigProperty(name = "welcome.message")      
1

    Optional<String> welcomeMessage;               
2

}
Copy to Clipboard Toggle word wrap
1

예 3.16. AnalyticsManager.java

package org.my.group;

import java.util.HashMap;
import java.util.Map;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject;

import org.eclipse.che.incubator.workspace.telemetry.base.AbstractAnalyticsManager;
import org.eclipse.che.incubator.workspace.telemetry.base.AnalyticsEvent;
import org.eclipse.che.incubator.workspace.telemetry.finder.DevWorkspaceFinder;
import org.eclipse.che.incubator.workspace.telemetry.finder.UsernameFinder;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.slf4j.Logger;

import static org.slf4j.LoggerFactory.getLogger;

@Dependent
@Alternative
public class AnalyticsManager extends AbstractAnalyticsManager {

    private static final Logger LOG = getLogger(AbstractAnalyticsManager.class);

    public AnalyticsManager(MainConfiguration mainConfiguration, DevWorkspaceFinder devworkspaceFinder, UsernameFinder usernameFinder) {
        super(mainConfiguration, devworkspaceFinder, usernameFinder);

        mainConfiguration.welcomeMessage.ifPresentOrElse(     
1

            (str) -> LOG.info("The welcome message is: {}", str),
            () -> LOG.info("No welcome message provided")
        );
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public void destroy() {}

    @Override
    public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) {
        LOG.info("The received event is: {}", event);         
2

    }

    @Override
    public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) { }

    @Override
    public void onActivity() {}
}
Copy to Clipboard Toggle word wrap
1
2

예 3.17. application.properties

quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
Copy to Clipboard Toggle word wrap
3.6.1.6.4.
  1. spec:
      template:
        attributes:
          workspaceEnv:
            - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT
              value: '4167'
    Copy to Clipboard Toggle word wrap
  2. $ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}
    Copy to Clipboard Toggle word wrap

검증 단계

  1. INFO  [org.ecl.che.inc.AnalyticsManager] (Quarkus Main Thread) No welcome message provided
    INFO  [io.quarkus] (Quarkus Main Thread) devworkspace-telemetry-example-plugin 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.7.2.Final) started in 0.323s. Listening on: http://localhost:4167
    INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
    INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, kubernetes-client, rest-client, rest-client-jackson, resteasy, resteasy-jsonb, smallrye-context-propagation, smallrye-openapi, swagger-ui, vertx]
    Copy to Clipboard Toggle word wrap
  2. INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (Aesh InputStream Reader) Live reload disabled
    INFO  [org.ecl.che.inc.AnalyticsManager] (executor-thread-2) The received event is: Edit Workspace File in Che
    Copy to Clipboard Toggle word wrap
3.6.1.6.5. Implementing isEnabled()

예 3.18. AnalyticsManager.java

@Override
public boolean isEnabled() {
    return true;
}
Copy to Clipboard Toggle word wrap

3.6.1.6.6.

  1. 예 3.19. TelemetryService.java

    package org.my.group;
    
    import java.util.Map;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    
    import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
    
    @RegisterRestClient
    public interface TelemetryService {
        @POST
        @Path("/event") 
    1
    
        @Consumes(MediaType.APPLICATION_JSON)
        Response sendEvent(Map<String, Object> payload);
    }
    Copy to Clipboard Toggle word wrap
    1
  2. 예 3.20. application.properties

    org.my.group.TelemetryService/mp-rest/url=http://little-telemetry-server-che.apps-crc.testing
    Copy to Clipboard Toggle word wrap
  3. 예 3.21. AnalyticsManager.java

    @Dependent
    @Alternative
    public class AnalyticsManager extends AbstractAnalyticsManager {
        @Inject
        @RestClient
        TelemetryService telemetryService;
    
    ...
    
    @Override
    public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) {
        Map<String, Object> payload = new HashMap<String, Object>(properties);
        payload.put("event", event);
        telemetryService.sendEvent(payload);
    }
    Copy to Clipboard Toggle word wrap

3.6.1.6.7. Implementing increaseDuration()

예 3.22. AnalyticsManager.java

@Override
public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
Copy to Clipboard Toggle word wrap
3.6.1.6.8.

예 3.23. AnalyticsManager.java

public class AnalyticsManager extends AbstractAnalyticsManager {

    ...

    private long inactiveTimeLimit = 60000 * 3;

    ...

    @Override
    public void onActivity() {
        if (System.currentTimeMillis() - lastEventTime >= inactiveTimeLimit) {
            onEvent(WORKSPACE_INACTIVE, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties);
        }
    }
Copy to Clipboard Toggle word wrap
3.6.1.6.9.

예 3.24. AnalyticsManager.java

@Override
public void destroy() {
    onEvent(WORKSPACE_STOPPED, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties);
}
Copy to Clipboard Toggle word wrap

3.6.1.6.10.

예 3.25. Dockerfile.jvm

FROM registry.access.redhat.com/ubi8/openjdk-11:1.11

ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'

COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185

ENTRYPOINT ["java", "-Dquarkus.http.host=0.0.0.0", "-Djava.util.logging.manager=org.jboss.logmanager.LogManager", "-Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}", "-jar", "/deployments/quarkus-run.jar"]
Copy to Clipboard Toggle word wrap

mvn package && \
podman build -f src/main/docker/Dockerfile.jvm -t image:tag .
Copy to Clipboard Toggle word wrap

예 3.26. Dockerfile.native

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5
WORKDIR /work/
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=$DEVWORKSPACE_TELEMETRY_BACKEND_PORT}"]
Copy to Clipboard Toggle word wrap

mvn package -Pnative -Dquarkus.native.container-build=true && \
podman build -f src/main/docker/Dockerfile.native -t image:tag .
Copy to Clipboard Toggle word wrap
3.6.1.6.11.

예 3.27. plugin.yaml

schemaVersion: 2.1.0
metadata:
  name: devworkspace-telemetry-backend-plugin
  version: 0.0.1
  description: A Demo telemetry backend
  displayName: Devworkspace Telemetry Backend
components:
  - name: devworkspace-telemetry-backend-plugin
    attributes:
      workspaceEnv:
        - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT
          value: '4167'
    container:
      image: YOUR IMAGE            
1

      env:
        - name: WELCOME_MESSAGE    
2

          value: 'hello world!'
Copy to Clipboard Toggle word wrap
1
2

$ oc create configmap --from-file=plugin.yaml -n openshift-devspaces telemetry-plugin-yaml
Copy to Clipboard Toggle word wrap

예 3.28. manifest.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      volumes:
        - name: plugin-yaml
          configMap:
            name: telemetry-plugin-yaml
            defaultMode: 420
      containers:
        - name: apache
          image: 'registry.redhat.io/rhscl/httpd-24-rhel7:latest'
          ports:
            - containerPort: 8080
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: plugin-yaml
              mountPath: /var/www/html
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
  name: apache
spec:
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    app: apache
  type: ClusterIP
---
kind: Route
apiVersion: route.openshift.io/v1
metadata:
  name: apache
spec:
  host: apache-che.apps-crc.testing
  to:
    kind: Service
    name: apache
    weight: 100
  port:
    targetPort: 8080
  wildcardPolicy: None
Copy to Clipboard Toggle word wrap
$ oc apply -f manifest.yaml
Copy to Clipboard Toggle word wrap

검증 단계

  • $ curl apache-che.apps-crc.testing/plugin.yaml
    Copy to Clipboard Toggle word wrap
3.6.1.6.12.
  1. components:
      ...
      - name: telemetry-plugin
        plugin:
          uri: http://apache-che.apps-crc.testing/plugin.yaml
    Copy to Clipboard Toggle word wrap

검증 단계

3.6.1.6.13.

  • 3.1.2절. “”을 참조하십시오.

    spec:
      devEnvironments:
        defaultPlugins:
        - editor: eclipse/che-theia/next     
    1
    
          plugins:                           
    2
    
          - 'http://apache-che.apps-crc.testing/plugin.yaml'
    Copy to Clipboard Toggle word wrap
    1
    2

추가 리소스

검증 단계

3.6.2.

3.1.3절. “”을 참조하십시오.

3.6.2.1.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGGER_CONFIG: "<key1=value1,key2=value2>" 
    1
    Copy to Clipboard Toggle word wrap
    1

    예 3.29.

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGGER_CONFIG: "org.eclipse.che.api.workspace.server.WorkspaceManager=DEBUG"
    Copy to Clipboard Toggle word wrap
3.6.2.2.

3.6.2.3.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_LOGGER_CONFIG: "che.infra.request-logging=TRACE"
    Copy to Clipboard Toggle word wrap

3.6.3.

dsc server:logs -d /home/user/che-logs/
Copy to Clipboard Toggle word wrap

Red Hat OpenShift Dev Spaces logs will be available in '/tmp/chectl-logs/1648575098344'
Copy to Clipboard Toggle word wrap

dsc server:logs -n my-namespace
Copy to Clipboard Toggle word wrap

추가 리소스

3.6.4.

3.6.4.1.

사전 요구 사항

  • oc

절차

  1. $ oc new-project monitoring
    Copy to Clipboard Toggle word wrap
  2. $ oc apply -f template.yaml -n monitoring
    Copy to Clipboard Toggle word wrap

예 3.30. template.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  labels:
    app: grafana
spec:
  ports:
  - name: 3000-tcp
    port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
    app: grafana
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  labels:
    app: prometheus
spec:
  ports:
  - name: 9090-tcp
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - image: registry.redhat.io/rhel8/grafana:7
        name: grafana
        ports:
        - containerPort: 3000
          protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: prometheus
  name: prometheus
spec:
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      serviceAccountName: prometheus
      containers:
      - image: quay.io/prometheus/prometheus:v2.36.0
        name: prometheus
        ports:
        - containerPort: 9090
          protocol: TCP
        volumeMounts:
        - mountPath: /prometheus
          name: volume-data
        - mountPath: /etc/prometheus/prometheus.yml
          name: volume-config
          subPath: prometheus.yml
      volumes:
      - emptyDir: {}
        name: volume-data
      - configMap:
          defaultMode: 420
          name: prometheus-config
        name: volume-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
data:
  prometheus.yml: ""
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: prometheus
---
Copy to Clipboard Toggle word wrap

추가 리소스

3.6.4.2.

3.6.4.2.1.

사전 요구 사항

절차

  1. 참고

    예 3.31. ClusterRoleBinding

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: devworkspace-controller-metrics-binding
    subjects:
      - kind: ServiceAccount
        name: prometheus
        namespace: monitoring
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: devworkspace-controller-metrics-reader
    Copy to Clipboard Toggle word wrap
  2. 참고

    예 3.32.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prometheus-config
      namespace: monitoring
    data:
      prometheus.yml: |-
          global:
            scrape_interval: 5s 
    1
    
            evaluation_interval: 5s 
    2
    
          scrape_configs: 
    3
    
            - job_name: 'DevWorkspace'
              scheme: https
              authorization:
                type: Bearer
                credentials_file: '/var/run/secrets/kubernetes.io/serviceaccount/token'
              tls_config:
                insecure_skip_verify: true
              static_configs:
                - targets: ['devworkspace-controller-metrics.<DWO_project>:8443'] 
    4
    
            - job_name: 'DevWorkspace webhooks'
              scheme: https
              authorization:
                type: Bearer
                credentials_file: '/var/run/secrets/kubernetes.io/serviceaccount/token'
              tls_config:
                insecure_skip_verify: true
              static_configs:
                - targets: ['devworkspace-webhookserver.<DWO_project>:9443'] 
    5
    Copy to Clipboard Toggle word wrap
    1
    2
    3
    4
    5
  3. $ oc scale --replicas=0 deployment/prometheus -n monitoring && oc scale --replicas=1 deployment/prometheus -n monitoring
    Copy to Clipboard Toggle word wrap

검증

  1. $ oc port-forward svc/prometheus 9090:9090 -n monitoring
    Copy to Clipboard Toggle word wrap
3.6.4.2.2.

Expand
표 3.20. 메트릭
이름유형설명라벨

devworkspace_started_total

카운터

devworkspace_started_success_total

카운터

devworkspace_fail_total

카운터

devworkspace_startup_time

히스토그램

Expand
표 3.21. 라벨
이름설명

source

string

routingclass

"basic|cluster|cluster-tls|web-terminal"

reason

"BadRequest|InfrastructureFailure|Unknown"

Expand
표 3.22.
이름설명

BadRequest

알 수 없음

3.6.4.2.3.

사전 요구 사항

절차

검증 단계

추가 리소스

3.6.4.2.4.

그림 3.1.

  • BadRequest
  • 알 수 없음

그림 3.2.

그림 3.3.

메모리
3.6.4.3.

3.6.4.3.1.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      components:
        metrics:
          enable: <boolean> 
    1
    Copy to Clipboard Toggle word wrap
    1
3.6.4.3.2.

사전 요구 사항

절차

  1. 참고

    예 3.33.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: prometheus-config
    data:
      prometheus.yml: |-
          global:
            scrape_interval:     5s             
    1
    
            evaluation_interval: 5s             
    2
    
          scrape_configs:                       
    3
    
            - job_name: 'OpenShift Dev Spaces Server'
              static_configs:
                - targets: ['che-host.<OpenShift Dev Spaces_project>:8087']  
    4
    Copy to Clipboard Toggle word wrap
    1
    2
    3
    4
  2. $ oc scale --replicas=0 deployment/prometheus -n monitoring && oc scale --replicas=1 deployment/prometheus -n monitoring
    Copy to Clipboard Toggle word wrap

검증

  1. $ oc port-forward svc/prometheus 9090:9090 -n monitoring
    Copy to Clipboard Toggle word wrap

추가 리소스

3.6.4.3.3.

사전 요구 사항

절차

  1. 그림 3.4.

    그림 3.5.

    그림 3.6.

    그림 3.7.

    그림 3.8.

    그림 3.9.

    그림 3.10.

    그림 3.11.

    그림 3.12.

3.7.

3.7.1.

사전 요구 사항

절차

  • 예 3.34. allow-from-openshift-devspaces.yaml

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
        name: allow-from-openshift-devspaces
    spec:
        ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                    kubernetes.io/metadata.name: openshift-devspaces   
    1
    
        podSelector: {}   
    2
    
        policyTypes:
        - Ingress
    Copy to Clipboard Toggle word wrap
    1
    2

3.7.2.

사전 요구 사항

중요

중요

절차

  1. $ oc create project openshift-devspaces
    Copy to Clipboard Toggle word wrap
  2. $ oc create secret TLS <tls_secret_name> \ 
    1
    
    --key <key_file> \ 
    2
    
    --cert <cert_file> \ 
    3
    
    -n openshift-devspaces
    Copy to Clipboard Toggle word wrap
    1
    2
    3
  3. $ oc label secret <tls_secret_name> \ 
    1
    
    app.kubernetes.io/part-of=che.eclipse.org -n openshift-devspaces
    Copy to Clipboard Toggle word wrap
    1
  4. 3.1.2절. “”을 참조하십시오.

    spec:
      networking:
        hostname: <hostname>     
    1
    
        tlsSecretName: <secret>  
    2
    Copy to Clipboard Toggle word wrap
    1
    2

3.7.3.

참고

사전 요구 사항

절차

  1. $ cat ca-cert-for-{prod-id-short}-*.pem | tr -d '\r' > custom-ca-certificates.pem
    Copy to Clipboard Toggle word wrap
  2. $ oc create configmap custom-ca-certificates \
        --from-file=custom-ca-certificates.pem \
        --namespace=openshift-devspaces
    Copy to Clipboard Toggle word wrap
  3. $ oc label configmap custom-ca-certificates \
        app.kubernetes.io/component=ca-bundle \
        app.kubernetes.io/part-of=che.eclipse.org \
        --namespace=openshift-devspaces
    Copy to Clipboard Toggle word wrap

검증 단계

  1. $ oc get configmap \
        --namespace=openshift-devspaces \
        --output='jsonpath={.items[0:].data.custom-ca-certificates\.pem}' \
        --selector=app.kubernetes.io/component=ca-bundle,app.kubernetes.io/part-of=che.eclipse.org
    Copy to Clipboard Toggle word wrap
  2. $ oc get pod \
        --selector=app.kubernetes.io/component=devspaces \
        --output='jsonpath={.items[0].spec.volumes[0:].configMap.name}' \
        --namespace=openshift-devspaces \
        | grep ca-certs-merged
    Copy to Clipboard Toggle word wrap
  3. $ oc exec -t deploy/devspaces \
        --namespace=openshift-devspaces \
        -- cat /public-certs/custom-ca-certificates.pem
    Copy to Clipboard Toggle word wrap
  4. $ oc logs deploy/devspaces --namespace=openshift-devspaces \
        | grep custom-ca-certificates.pem
    Copy to Clipboard Toggle word wrap
  5. $ for certificate in ca-cert*.pem ;
      do openssl x509 -in $certificate -digest -sha256 -fingerprint -noout | cut -d= -f2;
      done
    Copy to Clipboard Toggle word wrap
  6. $ oc exec -t deploy/devspaces --namespace=openshift-devspaces -- \
        keytool -list -keystore /home/user/cacerts \
        | grep --after-context=1 custom-ca-certificates.pem
    Copy to Clipboard Toggle word wrap
  7. $ oc get configmap che-trusted-ca-certs \
        --namespace=<workspace_namespace> \
        --output='jsonpath={.data.custom-ca-certificates\.custom-ca-certificates\.pem}'
    Copy to Clipboard Toggle word wrap
  8. $ oc get pod \
        --namespace=<workspace_namespace> \
        --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \
        --output='jsonpath={.items[0:].spec.volumes[0:].configMap.name}' \
        | grep che-trusted-ca-certs
    Copy to Clipboard Toggle word wrap
  9. $ oc get pod \
        --namespace=<workspace_namespace> \
        --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \
        --output='jsonpath={.items[0:].spec.containers[0:]}' \
        | jq 'select (.volumeMounts[].name == "che-trusted-ca-certs") | .name'
    Copy to Clipboard Toggle word wrap
  10. $ oc get pod \
        --namespace=<workspace_namespace> \
        --selector='controller.devfile.io/devworkspace_name=<workspace_name>' \
        --output='jsonpath={.items[0:].metadata.name}' \
    Copy to Clipboard Toggle word wrap
  11. $ oc exec <workspace_pod_name> \
        --namespace=<workspace_namespace> \
        -- cat /public-certs/custom-ca-certificates.custom-ca-certificates.pem
    Copy to Clipboard Toggle word wrap

추가 리소스

3.7.4.

사전 요구 사항

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      networking:
        labels: <labels> 
    1
    
        annotations: <annotations> 
    2
    Copy to Clipboard Toggle word wrap
    1
    2

3.7.5.

사전 요구 사항

  • dsc.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      networking:
        labels: <labels> 
    1
    
        domain: <domain> 
    2
    
        annotations: <annotations> 
    3
    Copy to Clipboard Toggle word wrap
    1
    2
    3

3.8.

주의

3.8.1.

  • 마운트 옵션

참고

절차

  1. 3.1.1절. “”을 참조하십시오.

    spec:
      components:
        database:
          pvc:
            # keep blank unless you need to use a non default storage class for PostgreSQL PVC
            storageClass: 'postgres-storage'
      devEnvironments:
        storage:
          pvc:
            # keep blank unless you need to use a non default storage class for workspace PVC(s)
            storageClass: 'workspace-storage'
    Copy to Clipboard Toggle word wrap
  2. che-postgres-pv.yaml file

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: postgres-pv-volume
      labels:
        type: local
    spec:
      storageClassName: postgres-storage
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data/che/postgres"
    Copy to Clipboard Toggle word wrap

  3. che-workspace-pv.yaml file

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: workspace-pv-volume
      labels:
        type: local
    spec:
      storageClassName: workspace-storage
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/data/che/workspace"
    Copy to Clipboard Toggle word wrap

  4. $ kubectl apply -f che-workspace-pv.yaml -f che-postgres-pv.yaml
    Copy to Clipboard Toggle word wrap
참고

3.9.

3.9.1.

3.9.1.1.

3.9.1.1.1.

사전 요구 사항

절차

  1. Register application을 클릭합니다.
  2. $ echo -n '<github_oauth_client_id>' | base64
    Copy to Clipboard Toggle word wrap
  3. $ echo -n '<github_oauth_client_secret>' | base64
    Copy to Clipboard Toggle word wrap

추가 리소스

3.9.1.1.2.

사전 요구 사항

절차

  1. kind: Secret
    apiVersion: v1
    metadata:
      name: github-oauth-config
      namespace: openshift-devspaces 
    1
    
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: oauth-scm-configuration
      annotations:
        che.eclipse.org/oauth-scm-server: github
        che.eclipse.org/scm-server-endpoint: <github_server_url> 
    2
    
    type: Opaque
    data:
      id: <Base64_GitHub_OAuth_Client_ID> 
    3
    
      secret: <Base64_GitHub_OAuth_Client_Secret> 
    4
    Copy to Clipboard Toggle word wrap
    1
    2
    3
    4
  2. $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
    Copy to Clipboard Toggle word wrap
3.9.1.2.

3.9.1.2.1.

사전 요구 사항

절차

  1. $ echo -n '<gitlab_application_id>' | base64
    Copy to Clipboard Toggle word wrap
  2. $ echo -n '<gitlab_client_secret>' | base64
    Copy to Clipboard Toggle word wrap

추가 리소스

3.9.1.2.2.

사전 요구 사항

    • GitLab Client Secret

절차

  1. kind: Secret
    apiVersion: v1
    metadata:
      name: gitlab-oauth-config
      namespace: openshift-devspaces 
    1
    
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: oauth-scm-configuration
      annotations:
        che.eclipse.org/oauth-scm-server: gitlab
        che.eclipse.org/scm-server-endpoint: <gitlab_server_url> 
    2
    
    type: Opaque
    data:
      id: <Base64_GitLab_Application_ID> 
    3
    
      secret: <Base64_GitLab_Client_Secret> 
    4
    Copy to Clipboard Toggle word wrap
    1
    2
    3
    4
  2. $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
    Copy to Clipboard Toggle word wrap
3.9.1.3.

3.9.1.4.

3.9.1.4.1.

사전 요구 사항

절차

  1. $ echo -n '<bitbucket_oauth_consumer_key>' | base64
    Copy to Clipboard Toggle word wrap
  2. $ echo -n '<bitbucket_oauth_consumer_secret>' | base64
    Copy to Clipboard Toggle word wrap

추가 리소스

3.9.1.4.2.

사전 요구 사항

절차

  1. kind: Secret
    apiVersion: v1
    metadata:
      name: bitbucket-oauth-config
      namespace: openshift-devspaces 
    1
    
      labels:
        app.kubernetes.io/part-of: che.eclipse.org
        app.kubernetes.io/component: oauth-scm-configuration
      annotations:
        che.eclipse.org/oauth-scm-server: bitbucket
    type: Opaque
    data:
      id: <Base64_Bitbucket_Oauth_Consumer_Key> 
    2
    
      secret: <Base64_Bitbucket_Oauth_Consumer_Secret> 
    3
    Copy to Clipboard Toggle word wrap
    1
    2
    3
  2. $ oc apply -f - <<EOF
    <Secret_prepared_in_the_previous_step>
    EOF
    Copy to Clipboard Toggle word wrap

3.9.2.

절차

  • 3.1.2절. “”을 참조하십시오.

    spec:
      components:
        cheServer:
          extraProperties:
            CHE_SYSTEM_ADMIN__NAME: '<admin>'
    Copy to Clipboard Toggle word wrap

3.9.3.

주의

사전 요구 사항

절차

  1. $ oc delete namespace <username>-devspaces
    Copy to Clipboard Toggle word wrap

4장.

4.1.

4.1.1.

절차

  • spec:
      components:
        pluginRegistry:
          openVSXURL: "<url_of_an_open_vsx_registry_instance>"
    Copy to Clipboard Toggle word wrap
    작은 정보

4.1.2.

작은 정보

절차

    •     {
              "id": "<published_by>.<unique_identifier>"
          }
      Copy to Clipboard Toggle word wrap
      작은 정보

    • 작은 정보
      •     {
                "id": "<published_by>.<unique_identifier>",
                "download": "<url_to_download_vsix_file>",
                "version": "<extension_version>"
            }
        Copy to Clipboard Toggle word wrap
      주의

    1. $ ./build.sh -o <username> -r quay.io -t custom
      Copy to Clipboard Toggle word wrap
    2. $ podman push quay.io/<username/plugin_registry:custom>
      Copy to Clipboard Toggle word wrap
  1. spec:
      components:
        pluginRegistry:
          deployment:
            containers:
              - image: quay.io/<username/plugin_registry:custom>
          openVSXURL: ''
    Copy to Clipboard Toggle word wrap

5장.

절차

추가 리소스

6장.

6.1.

6.2.

자동
수동

사전 요구 사항

절차

6.3.

사전 요구 사항

절차

검증 단계

6.4.

사전 요구 사항

절차

  1. $ dsc server:update -n openshift-devspaces
    Copy to Clipboard Toggle word wrap
    참고

검증 단계

6.5.

사전 요구 사항

절차

  1. $ bash prepare-restricted-environment.sh \
      --ocp_ver "4.11" \
      --devworkspace_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \
      --devworkspace_operator_version "v0.18.1" \
      --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.10" \
      --prod_operator_package_name "devspaces-operator" \
      --prod_operator_version "v3.5.0" \
      --my_registry "<my_registry>" \
      --my_catalog "<my_catalog>"
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행합니다.

    $ dsc server:update --che-operator-image="$TAG" -n openshift-devspaces --k8spodwaittimeout=1800000
    Copy to Clipboard Toggle word wrap

검증 단계

6.6.

사전 요구 사항

절차

  1. spec:
      ...
      conversion:
        strategy: None
    status:
    ...
    Copy to Clipboard Toggle word wrap
    작은 정보

    참고

  2. $ oc delete sub devworkspace-operator \
    -n openshift-operators 
    1
    Copy to Clipboard Toggle word wrap
    1
  3. $ oc get csv | grep devworkspace
    Copy to Clipboard Toggle word wrap
  4. $ oc delete csv <devworkspace_operator.vX.Y.Z> \
    -n openshift-operators 
    1
    Copy to Clipboard Toggle word wrap
    1
  5. $ cat <<EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: devworkspace-operator
      namespace: openshift-operators
    spec:
      channel: fast
      name: devworkspace-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      installPlanApproval: Automatic 
    1
    
      startingCSV: devworkspace-operator.v0.18.1
    EOF
    Copy to Clipboard Toggle word wrap
    1
    중요

7장.

주의

사전 요구 사항

  • dsc.

절차

  • $ dsc server:delete
    Copy to Clipboard Toggle word wrap
작은 정보

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동