LoginSignup
1
0

More than 1 year has passed since last update.

Alibaba CloudでACKを使ってk8s上でWordpressを運用してみよう(ACRからのコンテナイメージデプロイ)

Last updated at Posted at 2022-12-18

はじめに

みなさん、コンテナイメージレジストリ使っていますか?
コンテナを管理する際に使うマネージドサービスがコンテナイメージレジストリです。
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をクリックします。
image.png

Enterprise版の場合は、Helmチャート(K8s上でアプリケーションを実行するためのリソースが定義されたパッケージ)が使えたりするみたいですね。本番環境で運用する場合はEnterprise、それ以外の場合はPersonal Editionでよさそうです。
それぞれのEditionの違いが説明されます。
Alibaba Cloudはこういった部分のUI/UXがかなり洗練されていますね。
Create ACR Personal Editionをクリックします。
image.png

本当にいいんだな?と聞かれるので、チェックを入れてConfirmをクリックします。
大規模かどうかに関わらず、本番ならEnterprise Editionがおすすめのようですね。
image.png

次に、Dockerのパスワードを設定します。
Reset Docker Login Passwordをクリックし、パスワードを設定しましょう。
ここで入力したパスワードはACRの操作に必要なので、どこかに控えておいてください。
image.png

Namespaceの作成

では、ACRに設定をしていきます。
まずは、Namespaceの作成です。
ここでいうNamespace(=名前空間)は、リポジトリのnamespaceのことです。
例えば、web-appといったコンテナイメージを社内の複数のチームで利用することを考えてみます。
app-a-dev-teamapp-b-dev-teamのような形のnamespaceを切って、それぞれのチームごとにリポジトリを持つことで、チームごとに同じ名前のイメージを管理することができます。
app-a-dev-team/web-appapp-b-dev-team/web-appといったように、相互に干渉することなくイメージの管理を行うことができるため、非常に便利です。

画面左のNamespaceをクリックしCreate Namespaceを選択します。

image.png

Namespace欄に名前を入力して、Confirmをクリックします。
image.png

Namespaceが作成されたことを確認します。
image.png

リポジトリの作成

次はリポジトリの作成です。
画面左からRepositoriesを選択し、Create Repositryを選択します。

image.png

Repository Nameに任意の名前を入力します。
Summaryも必須なので、何に使うか簡単に入力しておきましょう。
入力できたらNextを選択します。
image.png

外部のリポジトリと連携ができるようですね。
今回は、簡単のためにLocal Repositryを選択します。
image.png

ACRにログインする

ACRを操作するためのコマンドが表示されます。
image.png

ではローカルから Alibaba Cloud Docker Registry にログインしてみましょう。
↑の赤枠のコマンドを、ローカルのTerminalなどで実行します。
(メールアドレス部分は、自身のメールアドレスに修正してください)
image.png

上記コマンド実行後パスワードの入力が求められるので、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のような、脆弱性スキャン機能のようです。
試しにクリックしてみましょう。
image.png

Scanボタンをクリックします。
image.png

結果が表示されました、No vulnerabilityということで脆弱性は無いようです。
AWSのECRでも同じようなことができますが、Alibaba CloudはUIが綺麗ですね。
image.png

WordPressをデプロイする

すでに作成済みのACKクラスターに対して、デプロイしてみましょう。
ACKのダッシュボード画面を開き、既存のクラスターを選択します。
そして、画面左のDeploymentをクリックし、Create from Imageをクリックします。
image.png

Name欄にack-WordPressと入力し、Nextをクリックします。
image.png

まずは、デプロイするWordPressイメージを選択します。
Select Imageをクリックしましょう。
image.png

Alibaba Cloud Container Registryを選択。
先ほど作成したリポジトリをクリックすると、左上にチェックが入ります。
そのうえで、OKボタンをクリックします。
image.png

Image Nameが設定されたことを確認します。
Image Versionは空欄のままで大丈夫です(自動的に最新のバージョンが選択されます)
そして、Set Image Pull Secretをクリックします。
image.png

ここでは、ACRからイメージをPullするための認証情報を登録します。
Nameは任意の名前を入力。
UsernameはDockerの認証を行ったメールアドレス、PasswordはACRを作成時にセットしたパスワードです。
設定できたら右下のOKをクリックしてください。
image.png

Resource Limitは、アプリケーションのリソース制限です。
CPUは0.5Core、Memoryは512MiBを選択します。
反対に、Requiredは、最低限確保するリソースの量です。
リソース不足でアプリケーションが起動しないといった自体を避けることができます。
CPUは0.25 Core、Memoryは256MiBを選択します。
image.png

次にポートの設定を行います。
NameはWordPress、Container Portは80を入力します。
設定ができたら、画面右上のNextをクリックします。
image.png

Advanced設定ページに遷移するので、Servicesの隣のCreateをクリックします。
(画面一番下のCreateではないので注意してください)
image.png

TypeServer 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をクリックします。
image.png

Serviceの作成ウインドウが閉じるので、再度画面右下のCreateをクリックします。
image.png

以下の画面が表示されれば、正常にデプロイが完了です。
image.png

アクセスしてみる

では、WordPressにアクセスしてみましょう。
画面左のNetworkをクリックし、Servicesの一覧を表示します。
先ほど作成したack-WordPress-svcのレコードがあることが確認できますね。
External Endpoint欄のIPアドレスが、WordPressのIPアドレスです。

image.png

WordPressの初期設定画面が開きました!
image.png

ApsaraDB RDSでWordPress用のデータベースを作成する

ただ、WordPressはデータベースが無いと動きません。
もちろん、コンテナの中にデータベースを立てて動かすこともできるのですが、データの永続性という観点ではデータベースは外出ししたほうが無難です。
そのため、今回はApsaraDB RDSを利用してDBインスタンスを構築し、ACKと連携させてみましょう。
(※ ずっと アスパラ だと勘違いしていた時期があったのですが、 アプサラ ですので皆様はお間違えなきよう…)

DBインスタンスを作成する

まずは、ApsaraDB RDSのコンソールを開きます。
左側のInstancesを選択し、Create Instanceをクリックします。
image.png

ApsaraDB RDSの設定画面です。
Billing MethodはPay-as-You-Go、つまり従量課金を選択します。

DB EngineはMySQLの8.0にしました。
EditionはBasicです。
image.png

Zoneはコンテナが稼働しているTokyo Zone Aを選択します。
(※ 右上に青く②とバッジが表示されていますが、これは2個のコンテナが動いているよ、と教えてくれているようです。Zoneを選択する際に非常に便利だな〜と驚きました)
Instance Typeは一番小さいものを選択しています。
image.png

設定できたら、画面右下のNext:Instance Configurationをクリックします。
時間当たりの料金がここで確認できる仕様は本当に便利ですよね。
Google CloudやAWSも実装してくれたらいいのに…。
image.png

次は確認画面なので、問題なければ右下のNext:Confirm Orderをクリックします。
image.png

この画面が表示されれば完了です。
ApsaraDB RDSが起動するまで数分待ちましょう。
image.png

DBの初期設定を行う

では、データベースの初期設定をしていきます。
ApsaraDB RDSのコンソール画面を開きます。
Instance StatusRunningになっていれば作成が完了しています。
Instance IDをクリックして設定画面に入りましょう。
image.png

DBのアカウント作成

まずはデータベースのアカウント作成です。
画面左からAccountを選択し、Create Accountを選択します。
image.png

Database Account欄には任意のユーザー名を入力します。
パスワードはデータベースに接続するためのパスワードです。
入力ができたらOKをクリックします。
image.png

先ほど作成したユーザーが表示されればOKです。
image.png

databaseの作成

次に、データベースを作成していきます。
あまりデータベースを使われない方だと混乱するかもしれないので補足しますと、ApsaraDB RDSのインスタンスはすでに作成が終わっており、マネージドなMySQL環境を使えるようになっています。この環境の中には、1つのデータベースだけではなく、複数のデータベースを混在させることができるので、今回WordPressが操作する対象のデータベースを今から作成する、というイメージです。

AWSのAmazon RDSだと、DB作成後にデータベースの作成を行うためには、EC2やCloud9などを使ってインスタンスに接続し、SQLコマンドを叩く必要があったので、この機能は非常に便利だな〜と感じます。

では、画面左からDatabaseをクリックしCreate Databaseを選択しましょう。
image.png

Database NameにWordPressと入力します。
Supported Character Setutf-8を選んでください。
そして、右下のCreateを選択します。
image.png

接続情報の確認

次に、データベースへの接続情報を確認します。
画面左からDatabase Connectionをクリックし、Internal EndpointのDNS名を控えます。以上で、ApsaraDB RDS側の設定は完了です。
image.png

ACK上のWordPressからApsaraDB RDSへ接続する

WordPressの画面に戻りましょう。
日本語を選択し、次へをクリックすると、初期設定画面に入ります。
image.png

さぁ、始めましょう!をクリックします。
image.png

ここで、WordPressにApsaraDB RDSに接続する方法を教えてあげます。
データベース名はWordPress
ユーザー名はwpuser
パスワードは先ほど作成した任意のパスワード。
データベースのホストは、先ほどコピーしたApsaraDB RDSのDNS名です。
全て入力できたら送信をクリックします。
image.png

データベースとの通信が問題なく完了すれば、以下の画面が表示されます。
インストール実行をクリックしてください。
image.png

WordPressの設定を行う

次に、WordPressの設定を行います。
サイトのタイトルと、管理者ユーザー名を設定します(任意の名前です)
メールアドレスを入力し、検索エンジンがサイトをインデックスしないようにするにチェックを入れます。これは、テスト用サイトなのでチェックを入れていますが、本番環境で公開する場合はチェックを外しておきましょう。Googleなどのクローラがサイトをインデックスしてくれます。

設定できたらWordPressをインストールをクリックします。
image.png

無事インストールできたようです。
では、WordPressの管理画面にログインしてみましょう
image.png

先ほど設定したユーザー名(またはメールアドレス)と、パスワードを入力し、ログインをクリックします。
image.png

WordPressの管理画面が開きました!
あとは通常のWordPressと同じように管理し、ユーザーに公開することが可能です。
image.png

おわりに

今回はACKのクラスター上にWordPressのアプリケーションをデプロイし、データベースは外出しのApsaraDB RDSを使う環境を作成しました。
クラスター上でアプリケーションを動かし、データベースをApsaraDB RDSで稼働させるという構成は、そのまま他のアプリケーションを使うときも同じです。
ぜひ自作のアプリケーションをAlibaba CloudのACK上で動かしてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0