VSTSを使用してKubernetes用のAlibaba Cloud Container ServiceにMySQLサーバをデプロイ

このチュートリアルでは、VSTSを使用して**Alibaba Cloud Container Service** for Kubernetes上にMySQLサーバをデプロイし、継続的なインテグレーションと継続的なデプロイを行います。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-to-deploy-mysql-server-in-alibaba-container-service-using-vsts_594947)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

[Alibaba Cloud Tech Share](https://account.alibabacloud.com/login/login.htm?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa&oauth_callback=https%3A%2F%2Fhome-intl.console.aliyun.com%2F)執筆者、Nadaraj Prabhu。Tech Shareは、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

#Kubernetes用のアリババコンテナサービスを作成する
ステップ1：[リンク]()のAlibaba Cloud Consoleにサインインします。

ステップ 2: Productsに移動し、「Elastic Computing」カテゴリの「コンテナサービス」をコンテナとして選択し、Kubernetes Serviceを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f7b052dd-e8fe-34c1-de5e-cbf98f17dfd8.png)



ステップ3：今すぐ "Kubernetes "としてコンテナサービスを選択し、その後、 「Kubernetesクラスタの作成 」を右クリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b7115bb0-9cd2-282b-15dd-9d6ca409f9e5.png)


ステップ4: クラスタ名、地域（場所）、ゾーン、VPC（仮想プライベート接続、既存のものを使用するか、新しいものを作成することができます）を提供します。ノードタイプはデフォルトのサブスクリプションタイプで、私の場合は "Pay-As-You-Go "です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f0396d98-bc43-908a-8775-4070dbccaec3.png)

注：現在、Alibaba Container Service for Kubernetesは "Pay-As-You-Go "サブスクリプションのみをサポートしています。

ステップ5: 次にスクロールダウンして「MASTER Configuration」に進み、マスターインスタンスのSKUサイズ(CPUとRAM)とDisk TypeとDisk Sizeを選択します。

次にWorkerの設定で、インスタンスのSKUサイズ(CPUとRAM)、ノード数、ディスクタイプとディスクサイズを選択します(必要に応じてデータディスクも含めて)。

今回はキーペアではなくパスワードを使用する予定なので、パスワード認証を選択しましたが、任意の認証を選択することもできます。

注意: デフォルトでは、マスターインスタンスは3つのノードを持っています。Worker/Agentインスタンスの場合は2ノードになります。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f3831ebc-f89a-3552-56bc-c9e1b1eb21d7.png)


ステップ6：現在、アリババのクラウドでは、"Dockerのバージョン "や "Kubernetesのバージョン "を変更するオプションを提供していません。

必要に応じて [SNAT](https://www.alibabacloud.com/forum/read-3218?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa) を設定してください。フロントエンドのウェブサイトやアプリケーションを使用している場合は Public [SLB](https://www.alibabacloud.com/help/doc-detail/27539.htm?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa) を使用してください。

Site-to-Site または Point-to-Site VPN を設定していない場合は、[SSH](https://www.alibabacloud.com/help/doc-detail/25434.htm?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa) アクセスを有効にします。

[クラウドモニター](https://www.alibabacloud.com/help/doc-detail/35170.htm?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa)を有効にします。これにより、クラスタを監視してメトリクスを確認し、レポートに基づいてアラートを作成することができます。

クラスタのテレメトリを収集するには、"Log Service "を選択します。

[Network Plugin](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa) を選択します。

カスタムポート（または128としてデフォルトのままにしておく）を選択し、また、カスタム[CA](https://kubernetes.io/docs/concepts/cluster-administration/certificates/?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa)（署名付き証明書）を持っている場合は、有効にして、ここでそれを添付することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9aeb63ee-5845-ffb5-1532-cc7acfec8185.png)

ステップ7: 右側の作成ボタンをクリックして、リクエストの有効性を確認して、"作成 "をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/18e6b7c3-6a24-0da2-7724-5b8d83c66d93.png)


ステップ8: デプロイが完了するのを待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d1f59ef1-2205-2691-2c2f-08e6ecb55e9e.png)

デプロイが成功すると、以下のようなメッセージが緑色のマークで表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/98c3003e-28da-aca0-cd44-25ece536c968.png)


今すぐ左のナビゲーションパネル上のクラスタをクリックして、あなたの "Kubernetes Cluster "を見ることができるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a57149ca-19ff-ec6a-5ebe-76efd259c91d.png)


#DevOps（VSTS）を使用してMySQLサーバをKubernetes Clusterにデプロイ
クラスタを管理し、アプリケーションやポッドを効率的に作成するためには、DevOpsのプラクティスを利用して行うのが良いでしょう。VSTS (Azure DevOps)では、kubectlタスクを使ってKubernetesクラスタに接続してデプロイすることができます。

ステップ1: VSTSからKubernetes Servicesを接続するには、kubeの設定ファイルが必要です。Alibaba Container Serviceに移動し、クラスタを選択して「Manage」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4a8ab7fb-a57c-a598-6b01-b5c2d4c99ad4.png)


ステップ 2: 下方向にスクロールして、"Cluster Resource "セクションに移動し、キー(kubeの設定コード)をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8c4e8ae6-ea66-ed07-6085-b3a1e53ec3b4.png)


注意：
1、インターネットのhttps/TLS接続で接続されますので、インターネットアクセスコードをコピーします。
2、オンプレミスのVSTSとVPNの設定をしている場合は、VPNアクセスを使用することができます。

ステップ3: Azure DevOps[リンク](https://dev.azure.com/?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa)に移動し、プロジェクトの設定がまだされていない場合は、新しいプロジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/ab7f6fbd-e639-83aa-d451-e10fc481b036.png)


ステップ4：プロジェクト名、説明文、バージョン管理を「Git」として提供し、Work Itemを提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/04d4ab39-db38-f292-c494-39fb5cba3182.png)


ステップ5：次に、Git Hub [Link](https://github.com/nadaraj15/Kb8-MySQL.git?spm=a2c65.11461447.0.0.3b1a3a2bZe7LVa&file=Kb8-MySQL.git)からリポジトリからパイプラインを構築してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b88d6186-44e0-23b3-ca77-cebca6165a1e.png)


ステップ6: VSTS Repoにコードをインポートしてデプロイするか、GitHubから直接コードを使用するかの2つのオプションがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2a93cee4-e542-7ab5-a6e6-6231ef218eff.png)


ステップ7：OAuthを使って権限を許可するか、マーケットプレイスからGitHubアプリをインストールします。今回のデモではOAuthを使ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/208cf8fc-b874-f6bf-769e-03e7de58d2bc.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/49fe881f-ec90-69b2-23fc-4c619029ca10.png)

ステップ8：「Kb8-MySQL」リポジトリを選択します。続行をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/97637fbd-9397-af9b-e924-0fb8fa87fb48.png)


ステップ9: 選択 Empty job, 次にエージェントを選択します "Hosted Ubuntu 1604 "として、記号をクリックしてタスクを追加します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6bdfaa44-ae36-e866-f43c-b3846c4df599.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3e1f8a87-1c12-00c1-b314-66ccdf93648e.png)


ステップ10. 「コピータスク」を選択し、以下のように「コピータスク」の値を入力します。

パラメータ：-
表示名: Copy Files Secret (または任意の名前を要件に応じて)
ソースフォルダ：(ファイルがルートフォルダにあるので空のままにしておき、そうでない場合はパスを指定)
コンテンツ：**/Secret.yml
対象フォルダ： $(Build.ArtifactStagingDirectory)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/95333e0f-0cfd-379a-2ff4-0c898429bcdf.png)


ステップ11：さらに3つの「コピータスク」を追加し、各タスクに対して以下のように「コピータスク」の値を入力します。

パラメーター: - - 表示名: Copy Files StorageClass (または任意の名前)
表示名: Copy Files StorageClass (または要件に応じて任意の名前)
ソースフォルダ：(ファイルがルートフォルダにあるので空のままにしておき、そうでない場合はパスを指定)
コンテンツ：**/StorageClass.yml
対象フォルダ： $(Build.ArtifactStagingDirectory)

表示名：Copy Files PersitantVolumeとクレーム（または要件に応じて任意の名前）を表示します。
ソースフォルダ：(ファイルがルートフォルダにあるので空のままにしておき、そうでない場合はパスを指定)
コンテンツ：**/PersitantVolumeandclaim.yml
対象フォルダ： $(Build.ArtifactStagingDirectory)

表示名：コピーファイルのmysql（または任意の名前を要件に応じての名前）を表示します。
ソースフォルダ：(ファイルがルートフォルダにあるので空のままにしておき、そうでない場合はパスを指定)
コンテンツ：**/MySQl.yml
対象フォルダ： $(Build.ArtifactStagingDirectory)

ステップ11：次に「Publish Build Artifactsタスク」を追加し、タスクに変更を加える必要はありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/28e82233-86cd-5305-ddad-e7261dfc20a9.png)

ステップ12: このビルドを保存してキューに入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/07917cd6-d671-528a-ea52-1ae2bb7ce417.png)

ステップ13: ログに移動して、ビルドの状態を確認します。以下のように成功しているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/40ea5e09-c0f4-621d-2e0b-53b3165fb330.png)

ステップ14: 次に、"pipeline "の "release "管理を使ってビルドをデプロイする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/dae95e26-face-6ace-b7c7-b3e8fa8e44ec.png)


ステップ15：空のジョブを作成し、ステージの名前を作成し、リリースし、"アーティファクト "を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a6561666-a349-afbd-be02-ff308656f626.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/ac7873b6-85b7-53b3-5102-563b90f50c43.png)


ステップ16: "Source "でビルドを選択し、"Default version "をLatestに変更します。追加をクリックして設定を保存します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/91ea920f-14d8-c599-badc-ea55d2920327.png)


ステップ17：「1ジョブ0タスク」をクリックして配置用のタスクを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fea32922-80f0-fe71-7066-01355c00c83c.png)

ステップ18：「Deploy to Kubernetes」タスクを選択します。次に「Service connection Type」を「Kubernetes Service Connection」に変更します。管理をクリックしてKubernetes接続を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/02d20f4e-1e56-d86a-a607-50adb39e494c.png)

注意: このデプロイメントはLinux環境でビルドされているので、Linuxエージェントで実行してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/18b98565-1b45-ba2c-297a-ef01853c619b.png)

ステップ19：「サービス接続」を選択し、「新しいサービス接続」に移動し、Kubernetesを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/49c18fa2-3992-fd1e-5a02-3a0b43f77bf4.png)

ステップ20：kubeconfigファイルを開き、コピーしてAzure DevOpsの "kubeconfig "フィールドに以下のように値を貼り付けます。

接続名を指定して、OKをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/46960a76-5b4c-963d-52ba-24943befb495.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3c75e153-c86a-44ae-2110-9c272f2f8442.png)


ステップ21: リリース構成に戻り、更新をクリックします。作成した接続「Alibaba Kubernetes Cluster」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4667c694-f18f-7b27-a927-512805497728.png)

Step 22: では、SecretをデプロイするためのKubectlタスクを設定してみましょう。

パラメータ：-
バージョン: 1.
表示名: kubectl secret create
コマンド：create
引数：-f Secret.yml
Advanced：
作業ディレクトリ: $(System.DefaultWorkingDirectory)/_MySQL Server-CI/drop (ドロップの場所)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6e38ba3c-7c0d-7715-3516-6d416019d81d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5c9ddd9a-b789-7d22-7a61-eca452e6a93a.png)


ステップ23: 残りの3つのタスク(ストレージクラス、永続ボリュームクレーム、MySQL)に対しても同様にKubectlタスクを設定します。

パラメータ：-
バージョン: 1.
表示名: kubectlストレージクラス
コマンド：create
引数：-f StorageClass.yml
Advanced：
作業ディレクトリ: $(System.DefaultWorkingDirectory)/_MySQL Server-CI/drop (ドロップの場所)

バージョン: 1.
表示名: kubectl Persistent Vol and Claim
コマンド：create
引数：-f PersitantVolumeandclaim.yml
Advanced：
作業ディレクトリ: $(System.DefaultWorkingDirectory)/_MySQL Server-CI/drop (ドロップの場所)

バージョン: 1.
表示名: kubectl Mysql
コマンド：create
引数：-f MySQl.yml
Advanced：
作業ディレクトリ: $(System.DefaultWorkingDirectory)/_MySQL Server-CI/drop (ドロップの場所)

設定後、保存をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/612cc0e7-ba7a-d541-bd5e-f633d23cf6a2.png)

ステップ24: 今度はAlibaba Kubernetes Clusterに環境をデプロイするためのリリースを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/ff6e7aa0-8198-b1e6-e027-3e48db2ad09b.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/ddb4692d-1bcb-5406-4bae-1f5d4baeebec.png)


ステップ 25. アリババのコンソールに移動して、MySQLサーバのデプロイが成功したことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/22898df6-4a88-e2e8-e7ae-5b2dca07a470.png)


今回は、VSTS(Azure DevOps)を利用して、Alibaba Cloud Kubernetes Container上にMySQLサーバをデプロイしました。VSTSを利用することで、どんな環境でも継続的なインテグレーションと継続的なデプロイ（CICD）が可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/db25a217-3870-8124-d38c-d5747b9e8860.png)


*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*