Mattermost Operator로 Mattermost 배포
Mattermost v12.0요약
Mattermost Kubernetes Operator를 사용하면 S3 호환 스토리지와 관리형 데이터베이스 서비스를 이용하여 Kubernetes에서 Mattermost를 배포할 수 있습니다. FIPS / STIG 준수 이미지가 필요하십니까?
Mattermost Kubernetes Operator를 사용하면 S3 호환 스토리지와 관리형 데이터베이스 서비스를 이용하여 Kubernetes에서 Mattermost를 배포할 수 있습니다. 오퍼레이터는 다양한 구성을 지원하지만, 프로덕션 환경에서는 클라우드 네이티브 방식을 사용하는 것을 강력히 권장합니다.
FIPS / STIG 준수 이미지가 필요하십니까? Operator 매니페스트의 version/이미지 필드가 mattermost/mattermost-enterprise-fips-edition 이미지를 가리키도록 설정하면 이 절차의 나머지 부분은 그대로 유지됩니다. FIPS / STIG 컨테이너 빌드를 참조하세요.
시작하기 전에 다음 사항이 준비되어 있는지 확인하세요.
- 작동 중인 Kubernetes 클러스터(Kubernetes 설정 가이드 참조). 클러스터는 지원되는 Kubernetes 버전을 실행해야 합니다.
- 로컬 컴퓨터에
kubectl명령줄 도구 설치(kubectl 설치 가이드 참조). - Deployment, Pod, 매니페스트 적용 등 Kubernetes 개념에 대한 기본적인 이해.
- 예상 사용자 부하에 따라 할당된 충분한 Kubernetes 리소스. 다양한 규모에서의 리소스 요구 사항은 엔터프라이즈 확장 문서를 참조하세요.
설치 단계#
설치 과정은 필요한 오퍼레이터를 설정한 후 Mattermost 자체를 배포하는 것입니다.
1단계: NGINX Ingress 컨트롤러 설치#
Kubernetes 배포 문서의 지침에 따라 Kubernetes 클러스터에 NGINX 인그레스 컨트롤러를 설치하세요. Mattermost는 설치하는 플랫폼과 관계없이 Helm을 통한 Nginx Operator 설치를 권장합니다.
2단계: Mattermost Operator 설치#
Mattermost Kubernetes Operator는 Helm을 사용하여 설치할 수 있습니다.
-
Helm(버전 3.13.0 이상)을 설치합니다. 설치 지침은 Helm 빠른 시작 문서를 참조하세요.
-
Mattermost Helm 리포지터리를 추가합니다.
helm repo add mattermost https://helm.mattermost.com -
config.yaml파일을 만들고 Mattermost 오퍼레이터 values 파일의 내용으로 채웁니다. 이 파일을 통해 오퍼레이터를 사용자 정의할 수 있습니다. -
Mattermost Operator를 위한 네임스페이스를 만듭니다.
kubectl create ns mattermost-operator -
Mattermost Operator를 설치합니다. 버전을 지정하지 않으면 최신 버전의 Mattermost Operator가 설치됩니다. 최신 버전의 Mattermost Operator를 사용하는 것을 권장합니다.
helm install <your-release-name> mattermost/mattermost-operator -n <namespace_name>예시:
helm install mattermost-operator mattermost/mattermost-operator -n mattermost-operator커스텀
config.yaml파일을 사용하려면 다음 명령을 실행하세요.helm install mattermost-operator mattermost/mattermost-operator -n mattermost-operator -f config.yaml
3단계: Mattermost 배포#
- 다중 서버 배포에는 Mattermost Enterprise 라이선스가 필요합니다.
- Enterprise 라이선스 없이 단일 서버 배포의 경우 아래 2단계의
spec섹션에Replicas: 1을 추가하세요. 고가용성 배포에 대한 자세한 내용은 고가용성 문서를 참조하세요.
-
(Mattermost Enterprise 전용) Mattermost 라이선스 Secret을 만듭니다.
[LICENSE_FILE_CONTENTS]를 실제 라이선스로 교체하여 다음 내용의mattermost-license-secret.yaml파일을 만듭니다.apiVersion: v1 kind: Secret metadata: name: my-mattermost-license type: Opaque stringData: license: -
mattermost-installation.yaml이라는 Mattermost 설치 매니페스트 파일을 만듭니다. 이 가이드의 파일 이름은 제안 사항이며, 다른 이름을 사용할 수 있습니다. 필요에 따라 값을 조정하여 다음 템플릿을 사용하세요.apiVersion: installation.mattermost.com/v1beta1 kind: Mattermost metadata: name: spec: size: ingress: enabled: true host: annotations: kubernetes.io/ingress.class: nginx version: licenseSecret: ""매니페스트의 주요 필드는 다음과 같습니다.
metadata.name: Kubernetes에서 Mattermost 배포 이름.spec.size: 설치 규모(예: "100users", "1000users" 등).spec.ingress.host: Mattermost 설치를 위한 DNS 이름.spec.version: Mattermost 버전. 사용 가능한 버전은 서버 버전 아카이브를 참조하세요. Mattermost Operator 최신 버전과 함께 Mattermost의 지원되는 버전을 사용해야 합니다.spec.licenseSecret: 라이선스가 포함된 Kubernetes Secret의 이름(Enterprise 필수).
구성 가능한 필드의 전체 목록은 예시 매니페스트 및 Custom Resource Definition(CRD)을 참조하세요.
-
데이터베이스 자격 증명을 위한
mattermost-database-secret.yaml파일을 만듭니다. 이 Secret은 Mattermost 설치와 동일한 네임스페이스에 있어야 합니다.apiVersion: v1 data: DB_CONNECTION_CHECK_URL: DB_CONNECTION_STRING: MM_SQLSETTINGS_DATASOURCEREPLICAS: kind: Secret metadata: name: my-postgres-connection type: OpaqueAWS Aurora with PostgreSQL 예시(
DB_CONNECTION_CHECK_URL,DB_CONNECTION_STRING,MM_SQLSETTINGS_DATASOURCEREPLICAS는 Aurora 연결 URL(예:postgres://user:password@host:5432/mattermost)을 base64로 인코딩한 값입니다):apiVersion: v1 data: DB_CONNECTION_CHECK_URL: cG9zdGdyZXM6Ly91c2Vy... DB_CONNECTION_STRING: cG9zdGdyZXM6Ly91c2Vy... MM_SQLSETTINGS_DATASOURCEREPLICAS: cG9zdGdyZXM6... kind: Secret metadata: name: my-postgres-connection type: Opaque
DB_CONNECTION_CHECK_URL 값은 오퍼레이터의 레거시 postgres:13 + pg_isready 준비 상태 확인용 init 컨테이너(spec.database.readinessCheck의 기본값인 external 모드)에서 사용됩니다. 새로 배포하는 경우 spec.database.readinessCheck.mode: builtin을 설정하는 것이 좋으며(아래 5단계 참조), 이 경우 준비 상태 확인용 init 컨테이너가 이미지에 내장된 mattermost db ping 명령을 실행하고 DB_CONNECTION_CHECK_URL 필드는 더 이상 필요하지 않습니다. 레거시 external 모드는 하위 호환성을 위해 계속 기본값으로 유지되지만 향후 오퍼레이터 릴리즈에서 지원 중단될 예정입니다.
4단계: 파일스토어 Secret 만들기#
객체 스토리지 서비스(예: AWS S3 또는 S3 호환 서비스)의 자격 증명을 저장하기 위한 mattermost-filestore-secret.yaml 파일을 만듭니다. 이 Secret은 Mattermost를 설치하려는 네임스페이스에서 만들어야 합니다. 파일은 다음과 같은 YAML 구조를 포함해야 합니다.
apiVersion: v1
kind: Secret
metadata:
name: <secret-name>
type: Opaque
data:
accesskey: <base64-encoded-access-key>
secretkey: <base64-encoded-secret-key>
| 키 | 설명 | 필수 |
|---|---|---|
| accesskey | 스토리지 서비스의 Base64로 인코딩된 접근 키. | 예 |
| secretkey | 스토리지 서비스의 Base64로 인코딩된 시크릿 키. | 예 |
| metadata.name | Kubernetes Secret의 이름. | 예 |
accesskey 및 secretkey 값은 base64로 인코딩되어야 합니다. 원본 키를 직접 입력하지 마세요. 명령줄 도구를 사용하여 base64 문자열을 생성하세요.
예시(AWS S3):
apiVersion: v1
kind: Secret
metadata:
name: my-s3-credentials
type: Opaque
data:
accesskey: QUNDRVNTX0tFWQo=
secretkey: U1VQRVJfU0VDUkVUX0tFWQo=
두 값을 모두 실제 base64로 인코딩한 키로 교체하세요.
5단계: Mattermost 설치 매니페스트 구성#
-
(2단계에서 만든)
mattermost-installation.yaml파일을 수정하여 Mattermost를 외부 데이터베이스 및 객체 스토리지에 연결합니다. YAML 구조 내에서 이러한 구성을 추가할 위치에 대한 안내로 지원되는 필드를 참조하세요. -
데이터베이스 연결:
-
매니페스트의
spec섹션에 다음을 추가합니다.spec: database: external: secret: <database-secret-name><database-secret-name>을 만든 데이터베이스 Secret의 이름(예:my-postgres-connection)으로 교체하세요. -
(권장) 준비 상태 확인용 init 컨테이너가 레거시
postgres:13+pg_isready방식 대신 이미지에 내장된mattermost db ping명령을 사용하도록 구성합니다. 이렇게 하면 별도의postgres:13이미지를 가져올 필요가 없어지고(이 이미지를 미러링할 수 없는 에어갭 클러스터의 주된 이유입니다), 준비 상태 확인이 실행 중인 Mattermost 릴리즈와 일치하도록 유지됩니다.spec: database: external: secret: <database-secret-name> readinessCheck: mode: builtin timeout: 5mtimeout은 선택 사항이며 기본값은5m입니다.builtin모드를 사용하려면mattermost db ping명령을 제공하는 Mattermost 릴리즈가 필요합니다(제공 여부는 Mattermost 서버 풀 리퀘스트를 참조하세요).readinessCheck를 생략하거나(또는mode: external로 설정하면) 레거시postgres:13+pg_isready동작이 그대로 유지됩니다. 레거시 모드는 하위 호환성을 위해 현재 기본값으로 사용되고 있으며 향후 오퍼레이터 릴리즈에서 지원 중단될 예정입니다.readinessCheck필드의 전체 스키마는 Mattermost CRD 참조를 참조하세요.
-
-
객체 스토리지 연결:
-
매니페스트의
spec섹션에 다음을 추가합니다.spec: fileStore: external: url: <storage-service-url> bucket: <bucket-name> secret: <filestore-secret-name><storage-service-url>을 스토리지 서비스의 URL(예:s3.amazonaws.com)로,<bucket-name>을 스토리지 버킷 이름으로,<filestore-secret-name>을 만든 파일스토어 Secret의 이름(예:my-s3-credentials)으로 교체하세요.
-
-
Amazon S3를 사용하는 경우 서버 측 암호화(SSE)와 SSL을 활성화하는 것이 좋습니다.
mattermostEnv섹션에 다음 환경 변수를 추가합니다.spec: mattermostEnv: MM_FILESETTINGS_AMAZONS3SSL: true MM_FILESETTINGS_AMAZONS3SSE: true
Mattermost 리소스 상태 확인#
Operator로 Mattermost 설치가 완료된 후 다음 명령으로 상태를 확인할 수 있습니다.
kubectl -n [namespace] get mattermost
kubectl describe 명령을 사용하여 Mattermost 서버 Pod에 대한 자세한 정보를 얻을 수 있습니다.
kubectl -n [namespace] describe pod
로그 따라가기
다음 명령을 사용하여 모든 Kubernetes Pod의 로그를 따라갈 수 있습니다.
kubectl -n [namespace] logs -f [pod name]
-n [namespace]를 생략하면 현재 컨텍스트의 기본 네임스페이스가 사용됩니다. 배포에 따라 네임스페이스를 지정하는 것을 권장합니다.
이 명령을 사용하여 필요에 따라 Mattermost Operator 또는 Mattermost 서버 로그를 검토할 수 있습니다.
- Kubernetes를 처음 접하거나 관리형 솔루션을 선호하는 경우 Amazon EKS, Azure Kubernetes Service, Google Kubernetes Engine, 또는 DigitalOcean Kubernetes와 같은 서비스를 고려하세요. 이 가이드는 데이터베이스 및 파일 스토리지에 외부 관리형 서비스를 사용하는 데 중점을 두고 있지만, Mattermost Operator는 다른 솔루션을 사용할 수 있는 유연성도 제공합니다. 예를 들어 CloudNative PG 오퍼레이터를 사용하여 Kubernetes 클러스터 내에 PostgreSQL 데이터베이스를 배포하거나(또는 외부에서 원하는 방식으로), 자체 호스팅 S3 호환 스토리지 서비스를 사용할 수 있습니다.
- 관리형 클라우드 서비스 사용이 일반적으로 유지 관리가 더 쉽고 프로덕션 배포에 권장되는 방법이지만, 자체 관리형 S3 호환 스토리지 서비스 및 CloudNative PG를 PostgreSQL에 사용하는 것도 해당 서비스를 관리할 전문 지식이 있는 경우 유효한 옵션입니다.
- 자체 관리형 구성 요소를 사용하기로 선택한 경우 내부 서비스를 가리키도록 지침을 적절히 조정해야 합니다.
- 프로덕션 배포를 사용자 정의하려면 구성 설정 문서를 참조하세요.
- 배포 중 문제가 발생하면 배포 문제 해결 가이드를 참조하세요.
자주 묻는 질문#
Mattermost 서버와 오퍼레이터 버전 호환성은 어떻게 됩니까?#
일반적으로 오퍼레이터는 Mattermost 서버의 대부분 또는 모든 버전과 호환됩니다. Mattermost 서버의 지원되는 버전과 함께 항상 오퍼레이터 최신 버전을 사용하는 것을 권장합니다.