KubernetesとGoogle Cloud SQL
このTipは@bourduxにより提出されました
Kubernetesサブジェネレータを使用してJHipsterアプリケーションをGoogle Container Engine にデプロイすることはすでに簡単ですが、デフォルトの動作はデータベース用のGoogle Compute Engine VMを作成します。
さらに一歩進んで、フルマネージドのMySQLインスタンスを使用したい場合は、Google Cloud SQLがあります。 自動化されたバックアップ、メンテナンス、レプリケーションにより、高可用性と優れた拡張性を実現します。
このヒント/チュートリアルでは、Google Cloud SQLデータベースをMySQLバックエンドとして使用するJHipsterアプリケーションをGoogle Cloudにデプロイする方法を示します。プロセスを簡素化するために、モノリシックアプリケーションを使用します。また、 私のお気に入りのビルドであるMavenビルドも使用します。 :p
前提条件
このチュートリアルでは、次のものが必要です。
- Google Cloud Platformアカウント。300ドル相当の無料クレジットで60日間無料トライアルを利用できます。
- Google Cloud SDK。ほとんどの操作をターミナルから実行します。対話型インストーラは非常に便利です。
- Docker
- プロダクションデータベースとしてMySQLを使用するJHipsterアプリケーション
gcloudとkubectlを初期化する
まず、gcloud
を使ったことがない場合は、次のコマンドで初期化する必要があります。
gcloud init
gcloud
を使用すると、Google Cloud Webコンソールから実行できるほとんどの操作を、
ターミナルから快適に実行できます。まず、kubectl
をインストールしましょう。
gcloud components install kubectl
kubectl
は、Kubernetesクラスタに対してコマンドを実行するためのコマンドラインインタフェースです。
KubernetesのWebサイトから直接インストールもできますが、全体的に見て、gcloudのインストールの方が
便利だと思いました。
次に、Google Cloudプロジェクトを作成する必要があります。この目的のためには、Webコンソールを使用する必要があります。gcloudではCLIからプロジェクトを 作成できないためです(アルファ版のためまだありません)。または、Resource Manager APIを使用できます。
- Google Cloud Platform Consoleに行き
- Create Projectをクリックします。
- プロジェクト名を選択し、CreateをクリックしてプロジェクトIDをメモし、必要に応じてカスタマイズします。
このチュートリアルのために、jhipster-kubernetes-cloud-sql
という名前を選択しました。
次に、以下の操作が必要です。
- プロジェクトのbillingを有効にします。
- プロジェクトのContainer Engine APIを有効にします。
- Compute Engine、Cloud SQL、Container EngineのAPI Managerを有効にします。
- Google Cloud SQL APIを有効にします。
最後に、現在作業しているプロジェクトをgcloud
に指示する必要があります。
gcloud config set project jhipster-kubernetes-cloud-sql
また、デフォルトでインスタンスを作成する場所も指定できます。私はeurope-west1-b
を選びました。
ケチなヨーロッパ人なので :)
gcloud config set compute/zone europe-west1-b
Cloud SQLインスタンスの作成
次に、Google Cloud SQLインスタンスを作成する必要があります。これはWebコンソールから行うことができ、利用可能なオプションをよく
理解するのに役立ちます。また、繰り返しますが、gcloud
の使用もできます。
gcloud beta sql instances create jhipster-sqlcloud-db --region=europe-west1 --tier=db-f1-micro\
--authorized-networks=`curl -s ifconfig.co` --backup-start-time=01:00 --enable-bin-log \
--activation-policy=ALWAYS --storage-type=HDD --storage-size=10GB
このコマンドを使用して、europe-west1
リージョンにjhipster-sql-cloud-db
という名前のSQL Cloudインスタンスを作成します。
使用可能な最小のマシンタイプを選択します。使用可能な階層の完全なリストを表示するには、gcloud sql tiers list
を使用できます。
次に、mysql
CLIを使用してアクセス用の独自のIPをホワイトリストにし、午前1時UTCから始まるバックアップ時間ウィンドウを設定し、バイナリロギングを有効にして、
アプリケーションに問題が発生した場合に時間を遡ることができるようにします。最後に、マシンを常にアクティブにするように設定し
(第2世代のマシンは使用ごとに課金されるため必要)、HDDストレージ(SSDの方がパフォーマンスは高いが
高価)を設定し、ストレージサイズを最小サイズに設定します。注意:第2世代のSQLインスタンスを作成するには、
ベータ版のgcloudクライアントを使用する必要があります。
インスタンスが開始されたことを確認するには、次のコマンドを使用します。
gcloud sql instances list
NAME REGION TIER ADDRESS STATUS
jhipster-sqlcloud-db europe-west1 db-f1-micro 146.148.21.155 RUNNABLE
IPアドレスをホワイトリストに登録したので、mysql
を使用してDBインスタンスにアクセスできるはずです。
mysql --host=146.148.21.155 --user=root --password
...
mysql>
データベースに接続しているので、アプリケーションのデータベースとユーザーを作成します。
Cloud SQLプロキシを使用してアプリケーションコンテナからSQLインスタンスに接続するため、
プロキシ経由の接続のみを許可する場合は、ユーザーのホスト名をcloudsqlproxy~%
に設定します。
このチュートリアルのアプリケーション名はjhipsterGoogleCloudSql
なので、JHipsterによって生成された構成を使用する場合は、
データベース名も同じ名前にする必要があります。
mysql> CREATE DATABASE jhipstergooglecloudsql;
Query OK, 1 row affected (0,03 sec)
mysql> CREATE USER 'jhipster'@'cloudsqlproxy~%';
Query OK, 0 rows affected (0,01 sec)
mysql> GRANT ALL PRIVILEGES ON jhipstergooglecloudsql.* TO 'jhipster'@'cloudsqlproxy~%';
Query OK, 0 rows affected (0,01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,02 sec)
application-prod.yml
でデータベースユーザーをjhipsterに変更するのを忘れないでください。
コンテナクラスタを作成する
GKEを使ってコンテナクラスタを作成しましょう。
gcloud container clusters create jhipster-sqlcloud-cluster --zone=europe-west1-b --machine-type=g1-small --num-nodes=1
このチュートリアルでは、1つの小さなノードのみを使用します。本番環境では、少なくとも3つのノードが必要です。:)
次に、kubectlにこのクラスタの適切な資格情報を取得させます。
gcloud container clusters get-credentials jhipster-sqlcloud-cluster
Fetching cluster endpoint and auth data.
kubeconfig entry generated for jhipster-sqlcloud-cluster.