- RBAC権限の設定
- クラウドプロバイダーによるクロスプレーンの構成
- マネージド・サービス・アクセスの設定
- リソースクラスの設定
- 自動DevOps設定オプション
- PostgreSQLインスタンスへの接続
クロスプレーン構成
Crossplaneをインストールしたら、使用するために設定する必要があります。
クロスプレーンの設定プロセスには、以下のものが含まれます:
- RBAC権限の設定。
- クラウドプロバイダーとのクロスプレーンの設定
- マネージドサービスアクセスの設定
- リソースクラスの設定
- Auto DevOpsの設定オプションを使用します。
- PostgreSQLインスタンスに接続します。
CrossplaneがPostgreSQLなどのクラウドサービスをプロビジョニングできるようにするには、クラウドプロバイダスタックにユーザーアカウントを設定する必要があります。 たとえば、以下のようになります:
- GCPのサービスアカウント。
- AWSのIAMユーザー。
重要な注意事項
- このガイドではGCPを例にしていますが、AWSとAzureのプロセスは似ています。
- Crossplaneでは、ポッドのIPアドレスがGCPネットワーク内でルーティング可能なように、エイリアスIPを有効にしたVPCネイティブのKubernetesクラスタが必要です。
まず、このガイドを通して使用される環境変数を宣言する必要があります:
export PROJECT_ID=crossplane-playground # the GCP project where all resources reside.
export NETWORK_NAME=default # the GCP network where your GKE is provisioned.
export REGION=us-central1 # the GCP region where the GKE cluster is provisioned.
RBAC権限の設定
-
GitLabが管理するクラスターでは、RBACは自動的に設定されます。
-
GitLabで管理されていないクラスターの場合は、提供されたトークンのサービスアカウントが
database.crossplane.io
APIグループのリソースを管理できることを確認してください:-
以下のYAMLを
crossplane-database-role.yaml
として保存します:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: crossplane-database-role labels: rbac.authorization.k8s.io/aggregate-to-edit: "true" rules: - apiGroups: - database.crossplane.io resources: - postgresqlinstances verbs: - get - list - create - update - delete - patch - watch
-
クラスターにクラスター・ロールを適用します:
kubectl apply -f crossplane-database-role.yaml
-
クラウドプロバイダーによるクロスプレーンの構成
インストールされたクラウドプロバイダスタックをユーザーアカウントで構成するには、「クラウドプロバイダーアカウントの構成」を参照してください。
シークレットと、シークレットを参照するProviderリソースは、ガイドのgitlab-managed-apps
名前空間に適用する必要があることに注意してください。 プロセスに従って変更することを確認してください。
マネージド・サービス・アクセスの設定
PostgreSQLデータベースとGKEクラスター間の接続を設定する必要があります。 これは以下のどちらかの方法で行うことができます:
- 下記のようにクロスプレーンを使用します。
- GCPコンソールで直接、非公開サービスへのアクセスを設定します。 GlobalAddressとConnectionリソースを作成します:
cat > network.yaml <<EOF
---
# gitlab-ad-globaladdress defines the IP range that will be allocated for cloud services connecting to the instances in the given Network.
apiVersion: compute.gcp.crossplane.io/v1alpha3
kind: GlobalAddress
metadata:
name: gitlab-ad-globaladdress
spec:
providerRef:
name: gcp-provider
reclaimPolicy: Delete
name: gitlab-ad-globaladdress
purpose: VPC_PEERING
addressType: INTERNAL
prefixLength: 16
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
---
# gitlab-ad-connection is what allows cloud services to use the allocated GlobalAddress for communication. Behind
# the scenes, it creates a VPC peering to the network that those service instances actually live.
apiVersion: servicenetworking.gcp.crossplane.io/v1alpha3
kind: Connection
metadata:
name: gitlab-ad-connection
spec:
providerRef:
name: gcp-provider
reclaimPolicy: Delete
parent: services/servicenetworking.googleapis.com
network: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
reservedPeeringRangeRefs:
- name: gitlab-ad-globaladdress
EOF
以下のコマンドを使用して、ファイルで指定された設定を適用します:
kubectl apply -f network.yaml
ネットワーク・リソースの作成は、以下のコマンドで確認できます。 これらのリソースの両方のステータスが準備完了であり、同期していることを確認します。
kubectl describe connection.servicenetworking.gcp.crossplane.io gitlab-ad-connection
kubectl describe globaladdress.compute.gcp.crossplane.io gitlab-ad-globaladdress
リソースクラスの設定
リソースクラスは、必要なマネージドサービスの設定を定義する方法です。 PostgreSQLリソースクラスを定義します。
-
gcp-postgres-standard.yaml
リソースクラスを定義します。
- デフォルトの CloudSQLInstanceClass。
- ラベルを持つ CloudSQLInstanceClass。
cat > gcp-postgres-standard.yaml <<EOF
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstanceClass
metadata:
name: cloudsqlinstancepostgresql-standard
labels:
gitlab-ad-demo: "true"
specTemplate:
writeConnectionSecretsToNamespace: gitlab-managed-apps
forProvider:
databaseVersion: POSTGRES_11_7
region: $REGION
settings:
tier: db-custom-1-3840
dataDiskType: PD_SSD
dataDiskSizeGb: 10
ipConfiguration:
privateNetwork: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
# this should match the name of the provider created in the above step
providerRef:
name: gcp-provider
reclaimPolicy: Delete
---
apiVersion: database.gcp.crossplane.io/v1beta1
kind: CloudSQLInstanceClass
metadata:
name: cloudsqlinstancepostgresql-standard-default
annotations:
resourceclass.crossplane.io/is-default-class: "true"
specTemplate:
writeConnectionSecretsToNamespace: gitlab-managed-apps
forProvider:
databaseVersion: POSTGRES_11_7
region: $REGION
settings:
tier: db-custom-1-3840
dataDiskType: PD_SSD
dataDiskSizeGb: 10
ipConfiguration:
privateNetwork: projects/$PROJECT_ID/global/networks/$NETWORK_NAME
# this should match the name of the provider created in the above step
providerRef:
name: gcp-provider
reclaimPolicy: Delete
EOF
以下のコマンドを使用して、リソース・クラス設定を適用します:
kubectl apply -f gcp-postgres-standard.yaml
以下のコマンドを使用して、Resourceクラスの作成を確認します:
kubectl get cloudsqlinstanceclasses
リソース・クラスでは、マネージド・サービスのサービス・クラスを定義することができます。 より大きなディスクやより高速なディスクを要求する別のCloudSQLInstanceClass
を作成することもできます。 また、特定のバージョンのデータベースを要求することもできます。
自動DevOps設定オプション
Auto DevOpsパイプラインは以下のオプションで実行できます:
Crossplaneを使用してPostgreSQLをプロビジョニングするには、環境変数AUTO_DEVOPS_POSTGRES_MANAGED
とAUTO_DEVOPS_POSTGRES_MANAGED_CLASS_SELECTOR
を設定する必要があります。
また、以下のオプションは、Helmチャートの値からオーバーライドすることもできます。
-
postgres.managed
を true に設定すると、デフォルトのリソース・クラスが選択されます。 リソース・クラスにはアノテーションresourceclass.crossplane.io/is-default-class: "true"
を付ける必要があります。CloudSQLInstanceClasscloudsqlinstancepostgresql-standard-default
がクレームを満たすために使用されます。 -
postgres.managed
true
postgres.managedClassSelector
はラベルに基づいて選択するリソースクラスを提供します。この場合、 の値は、CloudSQLInstance クラス を選択し、クレーム要求を満たします。postgres.managedClassSelector.matchLabels.gitlab-ad-demo="true"
cloudsqlinstancepostgresql-standard
Auto DevOpsパイプラインが正常に実行されると、PostgresqlInstanceがプロビジョニングされるはずです。
PostgreSQLインスタンスの作成を確認します。
kubectl get postgresqlinstance
サンプル出力:PostgresqlInstance のSTATUS
フィールドは、プロビジョニングに成功するとBOUND
に遷移します。
NAME STATUS CLASS-KIND CLASS-NAME RESOURCE-KIND RESOURCE-NAME AGE
staging-test8 Bound CloudSQLInstanceClass cloudsqlinstancepostgresql-standard CloudSQLInstance xp-ad-demo-24-staging-staging-test8-jj55c 9m
PostgreSQLインスタンスのエンドポイントとユーザークレデンシャルは、同じプロジェクト名前空間内のapp-postgres
というシークレットに存在します。
以下のコマンドで、データベース情報を含むシークレットが作成されていることを確認します:
kubectl describe secret app-postgres
出力例:
Name: app-postgres
Namespace: xp-ad-demo-24-staging
Labels: <none>
Annotations: crossplane.io/propagate-from-name: 108e460e-06c7-11ea-b907-42010a8000bd
crossplane.io/propagate-from-namespace: gitlab-managed-apps
crossplane.io/propagate-from-uid: 10c79605-06c7-11ea-b907-42010a8000bd
Type: Opaque
Data
====
privateIP: 8 bytes
publicIP: 13 bytes
serverCACertificateCert: 1272 bytes
serverCACertificateCertSerialNumber: 1 bytes
serverCACertificateCreateTime: 24 bytes
serverCACertificateExpirationTime: 24 bytes
username: 8 bytes
endpoint: 8 bytes
password: 27 bytes
serverCACertificateCommonName: 98 bytes
serverCACertificateInstance: 41 bytes
serverCACertificateSha1Fingerprint: 40 bytes
PostgreSQLインスタンスへの接続
CloudSQL上で新しくプロビジョニングされたPostgreSQLデータベース・インスタンスに接続する場合は、このGCPガイドに従ってください。