Knative OSS로 워크로드 마이그레이션

이 가이드를 사용하여 Google Kubernetes Engine의 오픈소스 Knative 서비스에서 실행되도록 워크로드를 마이그레이션하세요. 일반적으로 워크로드를 마이그레이션하려면 새 GKE 클러스터에 Knative serving 구성요소를 설치한 후 각 서비스를 해당 Knative 클러스터에 다시 배포해야 합니다.

오픈소스 Knative 사용, 관리, 지원은 사용자의 선택과 책임이지만 Knative로 마이그레이션하면 Google Kubernetes Engine 플랫폼에서 워크로드를 계속 실행할 수 있습니다.

주목할 만한 차이점:

  • 지원은 Google Kubernetes Engine으로 제한됩니다. Knative 지원은 Knative 커뮤니티에 문의하시면 됩니다.
  • Google Cloud CLI(gcloud)는 Google Kubernetes Engine에서만 지원됩니다. Knative에서는 kubectlkn 명령어를 지원합니다. kn 설치 방법 알아보기

시작하기 전에

Google Kubernetes Engine에 Knative 설치

Knative는 사용할 수 있는 몇 가지 설치 옵션과 네트워킹 레이어를 제공합니다. 다음 Knative 설치 단계에서는 Knative 연산자 메서드Istio 네트워킹 레이어를 사용합니다.

  1. Knative 연산자를 설치합니다.

    1. 연산자를 클러스터에 배포합니다.

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
      

      VERSIONKnative 연산자 버전으로 바꿉니다.

      예:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
      
    2. default 네임스페이스를 사용하도록 kubectl CLI를 설정합니다.

      kubectl config set-context --current --namespace=default
      
    3. 연산자가 성공적으로 생성되었는지 확인합니다.

      kubectl get deployment knative-operator
      

      결과:

      NAME               READY   UP-TO-DATE   AVAILABLE   AGE
      knative-operator   1/1     1            1           6m43s
      
  2. Knative serving 구성요소를 설치합니다.

    1. SERVING_FILENAME.yaml과 같이 YAML 파일을 만듭니다.

      apiVersion: v1
      kind: Namespace
      metadata:
        name: knative-serving
      ---
      apiVersion: operator.knative.dev/v1alpha1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      
    2. YAML 파일을 클러스터에 배포합니다.

      kubectl apply -f SERVING_FILENAME.yaml
      

      SERVING_FILENAME을 만든 YAML 파일로 바꿉니다.

  3. 사이드카 삽입을 네트워크 계층으로 사용하는 Istio를 설치합니다.

    대체 Istio 설치를 수행하고 구성할 수도 있습니다. Knative 웹사이트에서 모든 Istio 설치 옵션을 참조하세요. 이 설치에 30분 이상 걸릴 수 있습니다.

    1. 출시 페이지에서 Istio를 다운로드합니다.

    2. Docker 비율 제한을 피하려면 다음 명령어를 --set hub=gcr.io/istio-release 플래그와 함께 실행하여 Istio를 설치합니다.

      istioctl install --set hub=gcr.io/istio-release
      
    3. 다음 명령어를 실행하여 사이드카 삽입을 사용 설정합니다.

      kubectl label namespace default istio-injection=enabled
      
    4. 선택사항: 기본적으로 Istio는 istio-system 네임스페이스에 설치됩니다. 다른 네임스페이스를 구성하려면 다음 단계를 사용하면 됩니다.

      1. Istio의 커스텀 네임스페이스를 구성하려면 SERVING_FILENAME.yaml 구성 파일에 spec.config.istio 속성을 추가합니다. 예를 들면 다음과 같습니다.

        apiVersion: operator.knative.dev/v1alpha1
        kind: KnativeServing
        metadata:
          name: knative-serving
          namespace: knative-serving
        spec:
          # ...
          config:
            istio:
              local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
        

        다음과 같이 바꿉니다.

        • LOCAL_GATEWAY_NAMESPACE는 Knative serving을 설치한 네임스페이스입니다. 기본값: knative-serving
        • ISTIO_NAMESPACE는 Istio가 설치된 네임스페이스입니다. 기본값: istio-system
      2. 업데이트된 SERVING_FILENAME.yaml 서비스를 Knative 클러스터에 배포합니다.

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. istio-ingressgateway가 지정된 네임스페이스에 있는지 확인하여 Istio 설치를 확인합니다.

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        ISTIO_NAMESPACE를 Istio를 설치한 네임스페이스로 바꿉니다. 기본값: istio-system

        결과:

        NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                      AGE
        istio-ingressgateway   LoadBalancer   10.232.10.190   34.123.5.116   15021:30337/TCP,80:32549/TCP,443:31210/TCP   119m
        

서비스 마이그레이션

서비스를 마이그레이션하려면 서비스의 YAML 구성 파일을 Knative 클러스터에 배포합니다.

  1. 다음 명령어를 실행하여 Knative serving 서비스를 로컬 YAML 파일로 내보냅니다.

    gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
    

    다음과 같이 바꿉니다.

    • SERVICE를 Knative serving 서비스의 이름으로 바꿉니다.
    • NAMESPACE를 서비스가 실행되는 네임스페이스로 바꿉니다.
    • CLUSTER를 서비스가 실행되는 클러스터의 이름으로 바꿉니다.
    • FILENAME을 원하는 고유한 파일 이름으로 바꿉니다.
  2. 다음 속성 및 해당 값을 삭제하여 원치 않는 Knative serving 구성을 삭제하도록 내보낸 FILENAME.yaml 파일을 수정합니다.

    • metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
    • metadata.managedFields
    • spec.template.spec.containers.readinessProbes
    • spec.template.spec.enableServiceLinks

      예를 들어 spec: > template: > spec: > containers: 속성에서 다음 구성을 삭제해야 할 수 있습니다.

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. 수정된 .yaml 파일을 Knative 클러스터에 배포합니다.

    kubectl apply -f SERVICE.yaml
    

    SERVICE를 서비스 구성 파일의 이름으로 바꿉니다.

  4. 테스트 도메인 또는 cURL 명령어를 사용하여 배포된 서비스에 액세스합니다. 와일드 카드 DNS 서비스를 사용하여 서비스에 대한 외부 액세스를 테스트할 수 있습니다. 추가 옵션은 Knative 문서의 DNS 구성 섹션을 참조하세요.

    Magic DNS(sslip.io)를 사용하려면 다음 명령어를 실행합니다.

    sslip.io를 직접 사용할 수도 있습니다.

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
    

    VERSIONKnative serving 버전으로 바꿉니다.

    예:

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
    

서비스로 트래픽 마이그레이션

새로 배포된 서비스를 테스트하고 모든 프로덕션 트래픽을 마이그레이션할 준비가 되면 커스텀 도메인을 구성하고 등록기관에서 DNS 레코드를 업데이트할 수 있습니다. 커스텀 도메인 구성의 안내를 따르세요.