Kubernetes에 Mattermost 설치하기

plans-img 모든 플랜 에서 사용 가능

deployment-img self-hosted 배포판

Kubernetes 클러스터에서 Mattermost 시스템을 설치하고 배포하려면, 거의 모든 환경에서 Mattermost Kubernetes Operator를 사용하여 IT 관리 부담을 줄이고 자동화를 더 많이 활용할 수 있습니다.

여기 를 참조하여 현재 패치 릴리스와 호환되는 버전의 Kubernetes 클러스터 를 실행 중인 Kubernetes CLI kubectl 가 로컬 머신에 설치되어 있어야 하며, 배포, 파드와 같은 Kubernetes 개념 및 작업 (매니페스트 적용, 파드 로그 보기와 같은)에 대한 기본적인 이해가 필요합니다. Kubernetes에서 Mattermost를 실행하려면 사용자 총 수에 따라 리소스가 필요합니다. 다양한 규모에서 Mattermost가 필요로 하는 최소 Kubernetes 클러스터 리소스에 대해 알아보려면 Mattermost Kubernetes Operator 설명서를 참조하십시오.

Tip

오퍼레이터 설치

오퍼레이터는 kubectl 을 사용하여 설치되며, 각 오퍼레이터는 고유한 네임스페이스에 생성됩니다. 다른 네임스페이스를 사용하여 동일한 클러스터에서 여러 Mattermost 설치를 설치하고 실행할 수 있습니다.

  1. 지침에 따라 여기 를 참조하여 NGINX 인그레스 컨트롤러를 설치합니다.

  2. Mattermost Operator를 설치합니다:

kubectl create ns mattermost-operator

kubectl apply -n mattermost-operator -f https://raw.githubusercontent.com/mattermost/mattermost-operator/master/docs/mattermost-operator/mattermost-operator.yaml

Tip

Mattermost Operator Helm 차트를 사용하여 오퍼레이터를 설치하려면 여기 의 지침을 따르십시오. YAML 파일 작업에 대한 자세한 내용은 mattermost GitHub 리포지터리의 Kubernetes YAML 파일 문서를 참조하십시오.

Mattermost 배포

  1. (Mattermost Enterprise 전용) 텍스트 편집기를 열고, Mattermost 라이선스를 포함하는 시크릿 매니페스트를 작성하여 Mattermost 라이선스 시크릿을 만듭니다. 아래 [LICENSE_FILE_CONTENTS] 를 Mattermost 라이선스 파일의 내용으로 바꿉니다. 파일을 mattermost-license-secret.yaml 로 저장합니다.

apiVersion: v1
kind: Secret
metadata:
  name: my-mattermost-license
type: Opaque
stringData:
  license: <LICENSE_FILE_CONTENTS>
  1. 텍스트 편집기를 열고, Mattermost 설치 매니페스트에서 내용을 복사하여 로컬에 설치 매니페스트 파일을 만들고 구성 및 환경에 맞게 필드를 조정합니다.

apiVersion: installation.mattermost.com/v1beta1
kind: Mattermost
metadata:
  name: <INSTALLATION_NAME_HERE>                # 원하는 설치 이름을 선택합니다. 예 = mm-example-full
spec:
  size: <SIZE_VALUE_HERE>                       # 요구 사항에 맞춰 조정합니다. 예 = 5000users
  ingress:
    enabled: true
    host: <FULL_DOMAIN_NAME_HERE>               # 도메인에 맞게 조정합니다. 예 = example.mattermost-example.com
    annotations:
      kubernetes.io/ingress.class: nginx
  version: <VERSION_HERE>                       # Mattermost의 최신 지원되는 버전을 선택합니다. 예 = 9.3.0
  licenseSecret: ""                             # 단계 1에서 라이선스 시크릿을 만들었다면 이곳에 시크릿 이름을 입력합니다.

파일을 mattermost-installation.yaml 으로 저장합니다. 권장 파일명이 제공되었지만, 사용자의 명명 규칙이 다를 수 있습니다.

가장 일반적으로 사용되는 필드 중 일부는 다음과 같습니다:

필드

설명

metadata.name

Kubernetes에서 표시될 Mattermost의 이름. 되도록 짧게.

spec.size

설치의 크기. ‘100users’, ‘1000users, ‘5000users’, ‘10000users’, 또는 ‘25000users’ 중 하나일 수 있습니다.

spec.ingress.host

Mattermost 설치의 DNS.

spec.version

Mattermost 버전. Mattermost 버전을 선택할 때는 버전 아카이브 페이지 를 참조하십시오.

spec.licenseSecret

라이선스를 포함하는 Kubernetes 시크릿의 이름 (예. mattermost-license). 엔터프라이즈 배포에 필요함.

spec.mattermostEnv

Mattermost 인스턴스에 대한 사용자 정의 환경 변수 목록. Mattermost 구성을 조정해야 할 때에만 필요합니다.

추가 필드는 예제 에 문서화되어 있습니다. Kubernetes Custom Resources 경험이 있는 경우 사용자 정의 리소스 정의 를 확인할 수도 있습니다.

  1. 외부 데이터베이스 시크릿을 생성합니다. 데이터베이스 시크릿은 Mattermost 설치를 보유할 네임스페이스에 생성되어야 합니다. 시크릿에는 다음 데이터가 포함되어야 합니다:

설명

필수

DB_CONNECTION_STRING

데이터베이스에 연결하는 문자열.

MM_SQLSETTINGS_DATASOURCEREPLICAS

데이터베이스의 읽기 복제본에 연결하는 문자열.

아니요

DB_CONNECTION_CHECK_URL

데이터베이스 접근성을 확인하는 데 사용되는 URL.

아니요

PostgreSQL 호환 AWS Aurora용 예제 시크릿:

apiVersion: v1
data:
  DB_CONNECTION_CHECK_URL: cG9zdGdyZXM6Ly91c2VyOnN1cGVyX3NlY3JldF9wYXNzd29yZEBteS1kYXRhYmFzZS5jbHVzdGVyLWFiY2QudXMtZWFzdC0xLnJkcy5hbWF6b25hd3MuY29tOjU0MzIvbWF0dGVybW9zdD9jb25uZWN0X3RpbWVvdXQ9MTAK
  DB_CONNECTION_STRING: cG9zdGdyZXM6Ly91c2VyOnN1cGVyX3NlY3JldF9wYXNzd29yZEBteS1kYXRhYmFzZS5jbHVzdGVyLWFiY2QudXMtZWFzdC0xLnJkcy5hbWF6b25hd3MuY29tOjU0MzIvbWF0dGVybW9zdD9jb25uZWN0X3RpbWVvdXQ9MTAK

  MM_SQLSETTINGS_DATASOURCEREPLICAS: cG9zdGdyZXM6Ly91c2VyOnN1cGVyX3NlY3JldF9wYXNzd29yZEBteS1kYXRhYmFzZS5jbHVzdGVyLXJvLWFiY2QudXMtZWFzdC0xLnJkcy5hbWF6b25hd3MuY29tOjU0MzIvbWF0dGVybW9zdD9jb25uZWN0X3RpbWVvdXQ9MTAK
kind: Secret
metadata:
  name: my-postgres-connection
type: Opaque

Note

포스트그레SQL 데이터베이스의 연결은 pg_isready 를 사용하여 확인되며, DB_CONNECTION_CHECK_URL 은 연결 문자열과 동일합니다.

  1. 외부 파일 저장소 시크릿 생성. 파일 저장소 시크릿은 Mattermost 설치를 보관할 네임스페이스에 생성되어야 합니다. 시크릿에는 다음과 같은 데이터가 포함되어야 합니다:

설명

필수

accesskey

파일 저장소 액세스 키.

secretkey

파일 저장소 시크릿 키.

AWS S3에 대한 예시 시크릿:

apiVersion: v1
data:
  accesskey: QUNDRVNTX0tFWQo=
  secretkey: U1VQRVJfU0VDUkVUX0tFWQo=
kind: Secret
metadata:
  name: my-s3-iam-access-key
type: Opaque
  1. 설치 매니페스트 조정.

Mattermost Operator에게 외부 데이터베이스를 사용하도록 지시하려면, Mattermost 매니페스트에 다음 필드를 추가하십시오:

spec:
...
  database:
    external:
      secret: my-postgres-connection

Mattermost Operator에게 외부 파일 저장소를 사용하도록 지시하려면, Mattermost 매니페스트에 다음 필드를 추가하십시오:

spec:
...
  fileStore:
    external:
      url: s3.amazonaws.com
      bucket: my-s3-bucket
      secret: my-s3-iam-access-key

또한 Amazon S3를 사용하는 경우, MM_FILESETTINGS_AMAZONS3SSEMM_FILESETTINGS_AMAZONS3SSL 환경 변수를 true 로 설정하십시오:

spec:
...
  mattermostEnv:
    ...
    - name: MM_FILESETTINGS_AMAZONS3SSE
      value: "true"
    - name: MM_FILESETTINGS_AMAZONS3SSL
      value: "true"

외부 데이터베이스 및 파일 저장소 모두를 구성한 예시 Mattermost 매니페스트:

apiVersion: installation.mattermost.com/v1beta1
kind: Mattermost
metadata:
  name: mm-example-external-db
spec:
  size: 5000users
  ingress:
    enabled: true
    host: example.mattermost-example.com
    annotations:
      kubernetes.io/ingress.class: nginx
  version: 9.3.0
  licenseSecret: my-mattermost-license
  database:
    external:
      secret: my-postgres-connection
  fileStore:
    external:
      url: s3.amazonaws.com
      bucket: my-s3-bucket
      secret: my-s3-iam-access-key
  mattermostEnv:
  - name: MM_FILESETTINGS_AMAZONS3SSE
    value: "true"
  - name: MM_FILESETTINGS_AMAZONS3SSL
    value: "true"
  1. 설치 매니페스트 파일 적용. 매니페스트는 kubectl 을 사용하여 적용됩니다. 명령을 실행하기 전에 Kubernetes 클러스터에 연결되어 있는지 확인하십시오.

  1. 이 새로운 Mattermost 설치를 위한 네임스페이스 생성:

kubectl create ns mattermost
  1. (Mattermost Enterprise 전용) 라이선스 파일을 적용하려면, 단계 1에서 생성한 파일의 경로를 지정하여 적용하십시오:

kubectl apply -n mattermost -f [라이선스_시크릿_매니페스트_경로]
  1. 단계 2에서 생성한 파일의 경로를 지정하여 설치 파일을 적용하십시오:

kubectl apply -n mattermost -f [매니페스트_경로]

배포 과정은 다음 명령을 사용하여 쿠버네티스 사용자 인터페이스나 명령줄에서 모니터링할 수 있습니다:

kubectl -n mattermost get mm -w

사용자 정의 리소스가 stable 상태에 도달하면 설치가 성공적으로 완료될 것입니다.

  1. DNS 구성 및 Mattermost 사용.

  1. 배포가 완료되면, 다음 명령을 사용하여 Mattermost 배포의 호스트명 또는 IP 주소를 가져오십시오:

kubectl -n mattermost get ingress
  1. ADDRESS 열에서 얻은 호스트명 또는 IP 주소를 복사하고, 브라우저를 열어 Mattermost에 연결하십시오.

  2. 도메인 등록 서비스를 사용하여 매니페스트의 ingress.host 에 대한 정규 이름 또는 IP 주소 레코드를 만들고, 방금 복사한 주소를 가리키도록 하십시오. 예를 들어, AWS의 경우 Route53 내 호스팅된 존 내에서 이 작업을 수행할 수 있습니다.

  3. 브라우저에서 ingress.host URL로 이동하여 Mattermost를 사용하십시오.

Note

도메인을 구성하지 않고 로컬 머신에서만 시도하려는 경우, 다음 명령을 실행한 후 http://localhost:8065로 이동하십시오.

kubectl -n mattermost port-forward svc/[YOUR_MATTERMOST_NAME] 8065:8065

자주 묻는 질문

매터모스트 오퍼레이터와 Helm 차트의 차이점은 무엇입니까?

매터모스트 오퍼레이터는 쿠버네티스 내에서 실행되며 응용 프로그램의 관리와 배포를 용이하게 하는 응용 프로그램/제품별 명령어의 자체 포함된 집합입니다.

Helm은 쿠버네티스 매니페스트를 클러스터에 배포하는 데 사용되는 도구이지만 응용 프로그램의 관리를 용이하게 하지는 않습니다.

매터모스트 오퍼레이터가 Helm 차트를 대체하는 것인가요?

아닙니다. Helm은 오퍼레이터 및 기타 응용 프로그램을 배포하는 좋은 메커니즘이지만 응용 프로그램의 관리를 용이하게 하지는 않습니다.

minIO가 유일한 사용 가능한 저장 옵션인가요?

아니요, 다른 옵션 및 오퍼레이터를 추가할 수 있습니다.

매터모스트 오퍼레이터를 사용하려면 별도의 SQL 서버를 설치해야 하나요?

아니요, 기존 배포 위에 오퍼레이터를 사용할 수 있으며 별도의 데이터베이스를 설정할 필요가 없습니다. 곧 관련 구성 단계를 제공할 예정입니다.

다른 데이터베이스 스키마로 블루-그린 배포를 사용할 수 있나요?

현재 이 기능은 지원되지 않습니다. 이는 데이터베이스에서 데이터 입력이 누락될 가능성을 도입하기 때문입니다.

환경 변수는 지원되나요?

네. 그러나 config.json 파일 설정은 $MM_SQLSETTINGS_DATASOURCE 환경 변수가 설정되면 재정의됩니다. 자세한 내용은 환경 변수 구성 설정 설명서를 참조하십시오.

쿠버네티스에서 SAML을 사용한 로그인 구성 문제

일부 SAML 인증 구성에서 로그인 시에 502 상태 코드 응답이 나타날 수 있으며, 이는 요청이 너무 크기 때문입니다. 이는 NGINX Ingress의 기본 proxy-buffer-size 설정이 너무 낮기 때문일 수 있습니다. 이 문제를 해결하려면 매터모스트 매니페스트에 NGINX 주석을 추가하여 적절한 버퍼 크기(8k 또는 16k가 대부분의 경우에 충분함)를 구성합니다.

...
spec:
...
  ingress:
  ...
    annotations:
      nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
...

버퍼 크기를 변경할 때는 NGINX 성능에 약간 영향을 줄 수 있으므로 주의해야 합니다. 정확한 값은 기기에 따라 다릅니다.