ScalarDB Cluster のカスタム値ファイルを構成する
このドキュメントでは、ScalarDB Cluster チャートのカスタム値ファイルを作成する方法について説明します。パラメータの詳細については、ScalarDB Cluster チャートの README を参照してください。
必要な構成
画像構成
scalardbCluster.image.repositoryを設定する必要があります。コンテナーリポジトリからイメージをプルできるように、必ず ScalarDB Cluster コンテナーイメージを指定してください。
scalardbCluster:
image:
repository: <SCALARDB_CLUSTER_CONTAINER_IMAGE>
データベース構成
scalardbCluster.scalardbClusterNodeProperties を設定する必要があります。このパラメータには scalardb-cluster-node.properties を設定してください。ScalarDB Cluster の構成の詳細については、ScalarDB Cluster Configurations を参照してください。
scalardbCluster:
scalardbClusterNodeProperties: |
scalar.db.cluster.membership.type=KUBERNETES
scalar.db.cluster.membership.kubernetes.endpoint.namespace_name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAMESPACE_NAME}
scalar.db.cluster.membership.kubernetes.endpoint.name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAME}
scalar.db.contact_points=localhost
scalar.db.username=${env:SCALAR_DB_USERNAME}
scalar.db.password=${env:SCALAR_DB_PASSWORD}
scalar.db.storage=cassandra
Scalar Helm Chart を使用して Kubernetes 環境に ScalarDB Cluster をデプロイする場合は、次の3つのプロパティを常に設定する必要があることに注意してください。これらのプロパティは固定値です。プロパティは個別の環境に依存しないため、以下の値をコピーして scalardbCluster.scalardbClusterNodeProperties に貼り付けることで同じ値を設定できます。
scalardbCluster:
scalardbClusterNodeProperties: |
scalar.db.cluster.membership.type=KUBERNETES
scalar.db.cluster.membership.kubernetes.endpoint.namespace_name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAMESPACE_NAME}
scalar.db.cluster.membership.kubernetes.endpoint.name=${env:SCALAR_DB_CLUSTER_MEMBERSHIP_KUBERNETES_ENDPOINT_NAME}
オプションの構成
リソース構成 (実稼働環境で推奨)
Kubernetes でリクエストと制限を使用してポッドリソースを制御するには、scalardbCluster.resources を使用できます。
商用ライセンスの場合、Scalar 製品の各ポッドのリソースは 2vCPU / 4GB メモリに制限されることに注意してください。また、AWS Marketplace が提供する従量課金制のコンテナを使用する場合、resources.limits の 2vCPU / 4GB メモリ構成を超えるコンテナを実行することはできません。このリソース制限を超えると、ポッドは自動的に停止します。
Kubernetes のリクエストと制限と同じ構文を使用して、リクエストと制限を構成できます。Kubernetes のリクエストと制限の詳細については、Resource Management for Pods and Containers を参照してください。
scalardbCluster:
resources:
requests:
cpu: 2000m
memory: 4Gi
limits:
cpu: 2000m
memory: 4Gi
シークレット構成 (運用環境で推奨)
環境変数を使用して scalardbCluster.scalardbClusterNodeProperties 内の一部のプロパティ (資格情報など) を設定するには、scalardbCluster.secretName を使用して、いくつかの資格情報を含む Secret リソースを指定します。
たとえば、環境変数を使用してバックエンドデータベースの資格情報 (scalar.db.username および scalar.db.password) を設定できるため、ポッドの安全性が高まります。
Secret リソースの使用方法の詳細については、Secret リソースを使用して資格情報を環境変数としてプロパティファイルに渡す方法を参照してください。
scalardbCluster:
secretName: "scalardb-cluster-credentials-secret"
アフィニティ構成 (運用環境で推奨)
Kubernetes でアフィニティとアンチアフィニティを使用してポッドのデプロイメントを制御するには、scalardbCluster.affinity を使用できます。
Kubernetes のアフィニティとアンチアフィニティと同じ構文を使用して、アフィニティとアンチアフィニティを構成できます。Kubernetes でのアフィニティの構成の詳細については、Assigning Pods to Nodes を参照してください。
scalardbCluster:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- scalardb-cluster
- key: app.kubernetes.io/app
operator: In
values:
- scalardb-cluster
topologyKey: kubernetes.io/hostname
weight: 50
Prometheus および Grafana 構成 (実稼働環境で推奨)
kube-prometheus-stack を使用して ScalarDB Cluster ポッドを監視するには、scalardbCluster.grafanaDashboard.enabled、scalardbCluster.serviceMonitor.enabled、scalardbCluster.prometheusRule.enabled を true に設定します。これらの構成を true に設定すると、チャートは必要なリソースをデプロイし、kube-prometheus-stack が自動的に監視を開始します。
scalardbCluster:
grafanaDashboard:
enabled: true
namespace: monitoring
serviceMonitor:
enabled: true
namespace: monitoring
interval: 15s
prometheusRule:
enabled: true
namespace: monitoring
SecurityContext 設定 (デフォルト値を推奨)
ScalarDB Cluster ポッドの SecurityContext と PodSecurityContext を設定するには、scalardbCluster.securityContext と scalardbCluster.podSecurityContext を使用できます。
Kubernetes の SecurityContext および PodSecurityContext と同じ構文を使用して、SecurityContext および PodSecurityContext を構成できます。Kubernetes の SecurityContext および PodSecurityContext 構成の詳細については、Configure a Security Context for a Pod or Container を参照してください。
scalardbCluster:
podSecurityContext:
seccompProfile:
type: RuntimeDefault
securityContext:
capabilities:
drop:
- ALL
runAsNonRoot: true
allowPrivilegeEscalation: false
TLS 構成 (環境に応じてオプション)
TLS は、次の通信で有効にできます:
- ScalarDB Cluster ノードとクライアント間の通信。
- すべての ScalarDB Cluster ノード間の通信 (クラスターの内部通信)。
証明書管理にはいくつかのオプションがあります。
- 秘密鍵と証明書ファイルの管理
- cert-manager を使用して秘密鍵と証明書ファイルを自動的に管理します。
- メンテナンスや運用のコストを削減できます。たとえば、cert-manager は証明書の有効期限が切れる前に自動的に更新し、Scalar Helm Chart は秘密鍵と証明書ファイルを Scalar 製品ポッドに自動的にマウントします。
- cert-manager がサポートしていない CA は使用できません。サポートされている発行元は cert-manager ドキュメントで確認できます。
- 秘密鍵と証明書ファイルを手動で管理します。
- ご自身のお好みの方法で、秘密鍵と証明書ファイルを発行・管理することができます。
- cert-manager がサポートしていない場合でも、任意の証明書を使用できます。
- 証明書の有効期限が切れた場合は、シークレットリソースを更新する必要があります。
- cert-manager を使用して秘密鍵と証明書ファイルを自動的に管理します。
- 証明書の種類
- 信頼できる CA (サードパーティによる署名付き証明書) を使用します。
- サードパーティの証明書発行者からの信頼できる証明書を使用できます。
- パケットを暗号化できます。
- 信頼できる証明書を発行するには費用を支払う必要があります。
- 自己署名証明書を使用します。
- 証明書発行にかかるコストを削減できます。
- 証明書の信頼性は信頼できる CA よりも低くなりますが、パケットを暗号化できます。
- 信頼できる CA (サードパーティによる署名付き証明書) を使用します。
つまり、次の4つ のオプションがあります。
- 自動管理で自己署名 CA を使用します。
- 自動管理で信頼できる CA を使用します。
- 手動管理で自己署名 CA を使用します。
- 手動管理で信頼できる CA を使用します。
セキュリティ要件に基づいて、どの方法を使用するかを検討する必要があります。各方法のガイダンスと関連ドキュメントについては、次の意思決定ツリーを参照してください。
TLS を有効にする
次の構成を使用して、すべての ScalarDB Cluster 接続で TLS を有効にできます。
scalardbCluster:
scalardbClusterNodeProperties: |
...(omit)...
scalar.db.cluster.tls.enabled=true
scalar.db.cluster.tls.ca_root_cert_path=/tls/scalardb-cluster/certs/ca.crt
scalar.db.cluster.node.tls.cert_chain_path=/tls/scalardb-cluster/certs/tls.crt
scalar.db.cluster.node.tls.private_key_path=/tls/scalardb-cluster/certs/tls.key
scalar.db.cluster.tls.override_authority=<HOSTNAME_OF_YOUR_CERTIFICATE>
tls:
enabled: true
秘密鍵と証明書ファイルを使用する
次の構成を使用して、秘密鍵と証明書ファイルを設定できます。
scalardbCluster:
tls:
enabled: true
caRootCertSecret: "scalardb-cluster-tls-ca"
certChainSecret: "scalardb-cluster-tls-cert"
privateKeySecret: "scalardb-cluster-tls-key"
この場合、次のように山括弧内の内容を置き換えて、ScalarDB Cluster の秘密鍵と証明書ファイルを含むシークレットリソースを作成する必要があります。
kubectl create secret generic scalardb-cluster-tls-ca --from-file=ca.crt=/<PATH_TO_YOUR_CA_CERTIFICATE_FILE_FOR_SCALARDB_CLUSTER> -n <NAMESPACE>
kubectl create secret generic scalardb-cluster-tls-cert --from-file=tls.crt=/<PATH_TO_YOUR_CERTIFICATE_FILE_FOR_SCALARDB_CLUSTER> -n <NAMESPACE>
kubectl create secret generic scalardb-cluster-tls-key --from-file=tls.key=/<PATH_TO_YOUR_PRIVATE_KEY_FILE_FOR_SCALARDB_CLUSTER> -n <NAMESPACE>
秘密鍵と証明書ファイルを準備する方法の詳細については、Scalar 製品の秘密鍵と証明書ファイルを作成する方法を参照してください。