はじめに
みなさん、コンテナイメージレジストリ使っていますか?
コンテナを管理する際に使うマネージドサービスがコンテナイメージレジストリです。
AWSであれば、Amazon ECR(Amazon Elastic Container Registry )がありますね。
もちろんAlibaba Cloudにも同様のサービスがあります。
それが ACR (Alibaba Cloud Container Registry) です。
今回は、前回の記事で作成したACK(Alibaba Cloud Container Service for Kubernetes)クラスター上に、ACRからコンテナイメージをデプロイしてみます。ACKクラスター上のアプリケーションと、データベースを接続する基本的な構成なので、他のアプリケーションを動かす際にも応用ができきます!
ACK(Alibaba Cloud Container Service for Kubernetes)を使って、Alibaba Cloudでk8sを動かしてみる - Qiita
今回やること
- ACRを作成し、WordPressのコンテナイメージをPushする
- ACRにPushされたWordPressのコンテナイメージを、ACKクラスター上にデプロイする
- データベースとしてApsaraDB RDSを作成し、ACK上のWordPressと接続する
ACRの作成
Container Registryのコンソールを開きます。
Enterprise版、Personal版があります。
今回はPersonal版を使いますので、右側のPersonal Editionをクリックします。
Enterprise版の場合は、Helmチャート(K8s上でアプリケーションを実行するためのリソースが定義されたパッケージ)が使えたりするみたいですね。本番環境で運用する場合はEnterprise、それ以外の場合はPersonal Editionでよさそうです。
それぞれのEditionの違いが説明されます。
Alibaba Cloudはこういった部分のUI/UXがかなり洗練されていますね。
Create ACR Personal Edition
をクリックします。
本当にいいんだな?と聞かれるので、チェックを入れてConfirm
をクリックします。
大規模かどうかに関わらず、本番ならEnterprise Editionがおすすめのようですね。
次に、Dockerのパスワードを設定します。
Reset Docker Login Password
をクリックし、パスワードを設定しましょう。
ここで入力したパスワードはACRの操作に必要なので、どこかに控えておいてください。
Namespaceの作成
では、ACRに設定をしていきます。
まずは、Namespaceの作成です。
ここでいうNamespace(=名前空間)は、リポジトリのnamespaceのことです。
例えば、web-app
といったコンテナイメージを社内の複数のチームで利用することを考えてみます。
app-a-dev-team
、app-b-dev-team
のような形のnamespaceを切って、それぞれのチームごとにリポジトリを持つことで、チームごとに同じ名前のイメージを管理することができます。
app-a-dev-team/web-app
、app-b-dev-team/web-app
といったように、相互に干渉することなくイメージの管理を行うことができるため、非常に便利です。
画面左のNamespaceをクリックしCreate Namespace
を選択します。
Namespace欄に名前を入力して、Confirm
をクリックします。
リポジトリの作成
次はリポジトリの作成です。
画面左からRepositories
を選択し、Create Repositry
を選択します。
Repository Name
に任意の名前を入力します。
Summaryも必須なので、何に使うか簡単に入力しておきましょう。
入力できたらNext
を選択します。
外部のリポジトリと連携ができるようですね。
今回は、簡単のためにLocal Repositry
を選択します。
ACRにログインする
ではローカルから Alibaba Cloud Docker Registry にログインしてみましょう。
↑の赤枠のコマンドを、ローカルのTerminalなどで実行します。
(メールアドレス部分は、自身のメールアドレスに修正してください)
上記コマンド実行後パスワードの入力が求められるので、ACRの作成時に設定したDockerのパスワードを入力しましょう。
Login Succeeded
と表示されれば、ログインは完了です。
WordPressのイメージを取得し、ACRにPushする
今回は、ブログソフトウェアのWordPressをACK上にデプロイしていきます。
以下のコマンドで、WordPressの公式Dockerイメージを取得しましょう。
$ docker pull WordPress
次にdocker images
で、取得済みのDocker Imageの一覧にWordPressがあることを確認しましょう。
$ docker images
$ REPOSITORY TAG IMAGE ID CREATED SIZE
$ WordPress latest 8b105c533d0c 10 days ago 615MB
以下のコマンドを入力し、取得したイメージにタグをつけて、ACRにPushします。
この作業を行うことで、公式から取得したDocker Imageを自分のプライベートなリポジトリに保存することができます。
$ docker tag WordPress registry-intl.ap-northeast-1.aliyuncs.com/acr-sample/acr-sample-repo:WordPress
$ docker push registry-intl.ap-northeast-1.aliyuncs.com/acr-sample/acr-sample-repo:WordPress
では、Pushしたイメージを確認しましょう。
ダッシュボードの左側からTags
を選択します。
すると、Push済みのイメージの一覧が確認できます。
Pushしたイメージの脆弱性スキャンをしてみる
また、右のほうにはSecurity Scan
という項目がありますね。
AWSでいうInspectorのような、脆弱性スキャン機能のようです。
試しにクリックしてみましょう。
結果が表示されました、No vulnerability
ということで脆弱性は無いようです。
AWSのECRでも同じようなことができますが、Alibaba CloudはUIが綺麗ですね。
WordPressをデプロイする
すでに作成済みのACKクラスターに対して、デプロイしてみましょう。
ACKのダッシュボード画面を開き、既存のクラスターを選択します。
そして、画面左のDeployment
をクリックし、Create from Image
をクリックします。
Name欄にack-WordPress
と入力し、Next
をクリックします。
まずは、デプロイするWordPressイメージを選択します。
Select Image
をクリックしましょう。
Alibaba Cloud Container Registry
を選択。
先ほど作成したリポジトリをクリックすると、左上にチェックが入ります。
そのうえで、OK
ボタンをクリックします。
Image Name
が設定されたことを確認します。
Image Version
は空欄のままで大丈夫です(自動的に最新のバージョンが選択されます)
そして、Set Image Pull Secret
をクリックします。
ここでは、ACRからイメージをPullするための認証情報を登録します。
Nameは任意の名前を入力。
UsernameはDockerの認証を行ったメールアドレス
、PasswordはACRを作成時にセットしたパスワード
です。
設定できたら右下のOK
をクリックしてください。
Resource Limit
は、アプリケーションのリソース制限です。
CPUは0.5
Core、Memoryは512MiB
を選択します。
反対に、Requiredは、最低限確保するリソースの量です。
リソース不足でアプリケーションが起動しないといった自体を避けることができます。
CPUは0.25
Core、Memoryは256
MiBを選択します。
次にポートの設定を行います。
NameはWordPress
、Container Portは80
を入力します。
設定ができたら、画面右上のNextをクリックします。
Advanced設定ページに遷移するので、Servicesの隣のCreate
をクリックします。
(画面一番下のCreateではないので注意してください)
Type
で Server Load Balancer
- Public Access
- Create SLB Instance
を選択します。
Modify
をクリックすることで、SLB Instanceのタイプを変更することができます。今回はデフォルトのslb.s1.small
を選択します。
Port Mapping
では、以下のように設定します。
設定項目 | 値 |
---|---|
Name | WordPress-svc-port |
Service Port | 80 |
Container Port | 80 |
設定ができたら、右下のCreate をクリックします。 |
|
Serviceの作成ウインドウが閉じるので、再度画面右下のCreate
をクリックします。
アクセスしてみる
では、WordPressにアクセスしてみましょう。
画面左のNetwork
をクリックし、Servicesの一覧を表示します。
先ほど作成したack-WordPress-svc
のレコードがあることが確認できますね。
External Endpoint
欄のIPアドレスが、WordPressのIPアドレスです。
ApsaraDB RDSでWordPress用のデータベースを作成する
ただ、WordPressはデータベースが無いと動きません。
もちろん、コンテナの中にデータベースを立てて動かすこともできるのですが、データの永続性という観点ではデータベースは外出ししたほうが無難です。
そのため、今回はApsaraDB RDS
を利用してDBインスタンスを構築し、ACKと連携させてみましょう。
(※ ずっと アスパラ だと勘違いしていた時期があったのですが、 アプサラ ですので皆様はお間違えなきよう…)
DBインスタンスを作成する
まずは、ApsaraDB RDSのコンソールを開きます。
左側のInstances
を選択し、Create Instance
をクリックします。
ApsaraDB RDSの設定画面です。
Billing MethodはPay-as-You-Go
、つまり従量課金を選択します。
DB EngineはMySQLの8.0にしました。
EditionはBasic
です。
Zoneはコンテナが稼働しているTokyo Zone A
を選択します。
(※ 右上に青く②とバッジが表示されていますが、これは2個のコンテナが動いているよ、と教えてくれているようです。Zoneを選択する際に非常に便利だな〜と驚きました)
Instance Typeは一番小さいものを選択しています。
設定できたら、画面右下のNext:Instance Configuration
をクリックします。
時間当たりの料金がここで確認できる仕様は本当に便利ですよね。
Google CloudやAWSも実装してくれたらいいのに…。
次は確認画面なので、問題なければ右下のNext:Confirm Order
をクリックします。
この画面が表示されれば完了です。
ApsaraDB RDSが起動するまで数分待ちましょう。
DBの初期設定を行う
では、データベースの初期設定をしていきます。
ApsaraDB RDSのコンソール画面を開きます。
Instance Status
がRunning
になっていれば作成が完了しています。
Instance ID
をクリックして設定画面に入りましょう。
DBのアカウント作成
まずはデータベースのアカウント作成です。
画面左からAccount
を選択し、Create Account
を選択します。
Database Account
欄には任意のユーザー名を入力します。
パスワードはデータベースに接続するためのパスワードです。
入力ができたらOK
をクリックします。
databaseの作成
次に、データベースを作成していきます。
あまりデータベースを使われない方だと混乱するかもしれないので補足しますと、ApsaraDB RDSのインスタンスはすでに作成が終わっており、マネージドなMySQL環境を使えるようになっています。この環境の中には、1つのデータベースだけではなく、複数のデータベースを混在させることができるので、今回WordPressが操作する対象のデータベースを今から作成する、というイメージです。
AWSのAmazon RDSだと、DB作成後にデータベースの作成を行うためには、EC2やCloud9などを使ってインスタンスに接続し、SQLコマンドを叩く必要があったので、この機能は非常に便利だな〜と感じます。
では、画面左からDatabase
をクリックしCreate Database
を選択しましょう。
Database NameにWordPress
と入力します。
Supported Character Set
はutf-8
を選んでください。
そして、右下のCreate
を選択します。
接続情報の確認
次に、データベースへの接続情報を確認します。
画面左からDatabase Connection
をクリックし、Internal Endpoint
のDNS名を控えます。以上で、ApsaraDB RDS側の設定は完了です。
ACK上のWordPressからApsaraDB RDSへ接続する
WordPressの画面に戻りましょう。
日本語を選択し、次へ
をクリックすると、初期設定画面に入ります。
ここで、WordPressにApsaraDB RDSに接続する方法を教えてあげます。
データベース名はWordPress
ユーザー名はwpuser
パスワードは先ほど作成した任意のパスワード。
データベースのホストは、先ほどコピーしたApsaraDB RDSのDNS名です。
全て入力できたら送信
をクリックします。
データベースとの通信が問題なく完了すれば、以下の画面が表示されます。
インストール実行
をクリックしてください。
WordPressの設定を行う
次に、WordPressの設定を行います。
サイトのタイトルと、管理者ユーザー名を設定します(任意の名前です)
メールアドレスを入力し、検索エンジンがサイトをインデックスしないようにする
にチェックを入れます。これは、テスト用サイトなのでチェックを入れていますが、本番環境で公開する場合はチェックを外しておきましょう。Googleなどのクローラがサイトをインデックスしてくれます。
設定できたらWordPressをインストール
をクリックします。
無事インストールできたようです。
では、WordPressの管理画面にログインしてみましょう
先ほど設定したユーザー名(またはメールアドレス)と、パスワードを入力し、ログイン
をクリックします。
WordPressの管理画面が開きました!
あとは通常のWordPressと同じように管理し、ユーザーに公開することが可能です。
おわりに
今回はACKのクラスター上にWordPressのアプリケーションをデプロイし、データベースは外出しのApsaraDB RDSを使う環境を作成しました。
クラスター上でアプリケーションを動かし、データベースをApsaraDB RDSで稼働させるという構成は、そのまま他のアプリケーションを使うときも同じです。
ぜひ自作のアプリケーションをAlibaba CloudのACK上で動かしてみてください!