Skip to content

배포 및 유지 관리 / Helm 배포

이 문서에서는 주로 Helm을 통해 DataFlux Func를 배포하는 방법을 소개합니다.

1. 시스템 및 환경 요구 사항

DataFlux Func를 설치하기 전에 환경이 다음 조건을 충족하는지 확인하십시오.

1.1 시스템 요구 사항

DataFlux Func를 실행하는 클러스터는 다음 요구 사항을 충족해야 합니다.

  • Kubernetes > 1.14
  • Helm >= 3.8
  • 네트워크 대역폭 >= 10Mbps
  • 메모리 용량 >= 4GB
  • CPU 코어 >= 2
  • 외부 MySQL을 사용하는 경우 MySQL 버전은 5.7 이상이어야 하며, innodb_large_prefix 매개변수를 활성화하고 데이터베이스 인코딩은 utf8mb4여야 합니다
  • 외부 Redis를 사용하는 경우 Redis 버전은 5.0 이상이어야 하며 사용 가능한 메모리가 최소 1GB 이상이어야 합니다. 비클러스터 버전

DataFlux Func 스토리지는 공유 스토리지를 사용하는 것이 좋습니다. hostPath에는 단점이 있습니다

2. 명령줄 배포

2.1 클러스터 Storage Class 확인

다음 명령을 실행합니다.

Bash
1
kubectl get sc

출력은 다음과 같습니다.

Text Only
1
2
NAME         PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   77d

2.2 Helm 버전 확인

다음 명령을 실행합니다.

Bash
1
helm version

2.3 설치 수행

Bash
1
2
3
helm upgrade -i {Release Name} oci://pubrepo.dataflux-func.com/dataflux-func/func -n {Namespace} --create-namespace \
    --set storage.pvc.enabled=true,storage.pvc.storageClass="{Storage Class}" \
    --set ingress.enabled=true,ingress.hostName="{Host Name}"

{Release Name}은 Helm 별칭이고, {Namespace}가 존재하지 않으면 생성됩니다. {Storage Class}는 1단계의 Storage Class 이름이고, {Host Name}은 ingress 도메인 이름입니다. 설치가 성공하면 접근할 수 있습니다.

Helm 배포는 기본적으로 MySQL과 Redis를 설치합니다. 외부 MySQL과 Redis를 사용할 수도 있습니다. 자세한 배포 방법은 charts 패키지 내 README 문서에 있습니다.

2.4 설치 확인

다음 명령을 실행합니다.

Bash
1
helm ls -n {Namespace}

STATUS가 deployed이면 성공을 의미합니다

또한 브라우저를 통해 지정된 {Host Name}에 접속할 수 있습니다.

2.5 시스템 초기화

브라우저로 설정된 ingress 도메인에 접속하면 기본 구성으로 초기화하거나, 설정을 사용자 지정하거나, 기본값으로 데이터베이스를 저장하고 초기화할 수 있습니다.

setup-page.png

3. Func 업그레이드

3.1 values 구성 가져오기

다음 명령을 실행합니다.

Bash
1
2
helm get values {Release Name} -n {Namespace} -o yaml > values.yaml
cat values.yaml

3.2 현재 Func 버전 확인

다음 명령을 실행합니다.

Bash
1
helm ls -n {Namespace}

3.3 Func 업그레이드

다음 명령을 실행합니다.

Bash
1
2
3
helm upgrade {Release Name} oci://pubrepo.dataflux-func.com/dataflux-func/func \
    -n {Namespace} \
    -f values.yaml

3.4 업그레이드 결과 확인

다음 명령을 실행합니다.

Bash
1
helm ls -n {Namespace}

4. 기타 문제

4.1 브라우저에서 502가 반환되는 경우

Helm 상태가 deployed로 표시되면 다음 단계에 따라 문제를 해결합니다.

Ingress 생성 성공 여부 확인

ingress 정보를 확인합니다.

Bash
1
kubectl get ing -n {Namespace}

Pod 상태 확인

일반적으로 pvc 생성 실패로 인해 발생하며, 실제 상황에 따라 해결합니다.

pod 상태를 확인합니다.

Bash
1
kubectl get pods -n {Namespace}

출력은 다음과 같습니다.

Text Only
1
2
3
4
5
6
7
8
9
NAME                                READY   STATUS    RESTARTS   AGE
func-mysql-575d576db7-zclcr         1/1     Running   0          13m
func-redis-fc8f8b95f-c27b2          1/1     Running   0          13m
func-server-7d44fc4dc6-d4gp8        1/1     Running   0          13m
func-worker-0-cb64778bc-q6vts       1/1     Running   2          13m
func-worker-1-6-597668777f-lnmbb    1/1     Running   2          13m
func-worker-7-8f976bfd9-fz7jf       1/1     Running   2          13m
func-worker-8-9-656fdb9bd9-rcbph    1/1     Running   1          13m
func-worker-beat-67c995968c-znq2r   1/1     Running   1          13m

PVC 상태를 확인합니다.

Bash
1
kubectl get pvc -n {Namespace}

출력은 다음과 같습니다.

Text Only
1
2
3
func-mysql       Pening    pvc-0a3db9c5-0b60-428b-9b19-4ff827d155fe   50G    RWX    nfs-client    15m
func-redis       Pening    pvc-cfceb581-c711-4e1d-9ae9-8063ca1ee1a9   10G    RWX    nfs-client    15m
func-resources   Bound     pvc-0cc6f1df-666c-4512-bea9-baa40461c81c   10G    RWX    nfs-client    15m

4.2 '여전히 사용 중인 이름은 재사용할 수 없습니다' 오류

배포 중에 '여전히 사용 중인 이름은 재사용할 수 없습니다' 오류가 발생하면 현재 네임스페이스에 {Release Name}이 이미 존재한다는 의미입니다.

설치 전에 기존 {Release Name}을 삭제하거나 {Release Name}을 변경할 수 있습니다.

4.3 'Connector에 대한 연결 시간이 초과되었습니다' 오류

Connector를 생성할 때 'Connector에 대한 연결 시간이 초과되었습니다' 오류가 발생하면 func 관련 pod를 모두 다시 시작하십시오.

func 관련 Deployment는 다음과 같습니다.

  • func-server
  • func-worker-0
  • func-worker-1-6
  • func-worker-7
  • func-worker-8-9
  • func-worker-beat

func-server의 func은 {Release Name}이며, {Release Name}에 따라 변경됩니다

5.4 환경 변수 확장은 Secret 참조를 지원합니다

환경 변수에 대한 자세한 내용은 배포 및 유지 관리 / 구성 파일을 참조하십시오. DFF_ + 구성 항목입니다. 예를 들어 MYSQL_HOST는 환경 변수 DFF_MYSQL_HOST에 해당합니다.

Kubernetes Secret 생성

Bash
1
2
3
4
5
6
7
8
kubectl create ns {Namespace}
kubectl create secret generic func \
  --from-literal=DFF_MYSQL_HOST=<your-host> \
  --from-literal=DFF_MYSQL_PORT=<your-port> \
  --from-literal=DFF_MYSQL_USER=<your-user> \
  --from-literal=DFF_MYSQL_PASSWORD=<your-password> \
  --from-literal=DFF_MYSQL_DATABASE=<your-database> \
  -n {Namespace}

values.yaml 수정

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
extraBackendEnvs:
# secret 참조에 대한 자세한 내용은 readme 페이지를 참조하십시오
- name: DFF_MYSQL_HOST
  valueFrom:
    secretKeyRef:
      name: func
      key: DFF_MYSQL_HOST
- name: DFF_MYSQL_PORT
  valueFrom:
    secretKeyRef:
      name: func
      key: DFF_MYSQL_PORT
- name: DFF_MYSQL_USER
  valueFrom:
    secretKeyRef:
      name: func
      key: DFF_MYSQL_USER
- name: DFF_MYSQL_PASSWORD
  valueFrom:
    secretKeyRef:
      name: func
      key: DFF_MYSQL_PASSWORD
- name: DFF_MYSQL_DATABASE
  valueFrom:
    secretKeyRef:
      name: func
      key: DFF_MYSQL_DATABASE

업그레이드 또는 설치

Bash
1
2
3
helm upgrade {Release Name} func --repo https://pubrepo.dataflux-func.com/chartrepo/func \
    -n {Namespace} \
    -f values.yaml