LoginSignup
1

はじめに

これはAlibaba CloudのkubernetesやServerless製品(SAEなど)でサービス立ち上げてみよう by Alibaba Cloud Advent Calendar 2023 の9日目の記事です。
私は日頃からAlibabaCloudによるソリューションや開発手法、展開に取り組んでおり、日々中国や全世界から最先端の技術取得に励んでいます。
そうした活動をもっと外部へと発信していこうと始めたのがこのAdventCalendarです。メンバー一人一人が書いた記事を通して、少しでも多くの方にAlibabaCloudの興味を持って頂ければ幸いです。
さて、本記事はAlibaba Cloud Container Service for Kubernetes (ACK) にMagentoをデプロイしてみる話です。
Magento はオープンソースで人気のあるECプラットフォームです。Magento はオープンソース版もあり、必要なすべての e コマース機能が付帯されているため、スモールスタートから大規模Webサイト向けに使いやすく、色々な実績があります。

閑話休題、この Magento を Alibaba Cloud Container Service for Kubernetes (以降、ACK) にデプロイします。なぜACKかというと、後日記事予定である MagentoをServerless App Engineへデプロイする手順 との比較をしてみたいのと、ACK がどれだけハイパフォーマンスかつスケーラブルなコンテナーアプリケーションの管理サービスかを確認してみます。

このチュートリアルについて

対象となる方

このガイドは、次の方を対象としています。

  • Magento、Kubernetes、Helmに関する基本的な知識があること
  • Alibaba Cloud と ACK(Alibaba Cloud Container Service for Kubernetes) に関する基本的な知識があること

前提条件:

  • Alibaba cloud アカウント
  • ACK(Alibaba Cloud Container Service for Kubernetes)とdependency products を事前に有効
  • 作業環境用にECS (Elastic Compute Service) 1台。OSは何でもよいですが、著者はCentOSを利用しています。

Kubernetesクラスターを用意

コンソールのTop画面から、Container Service for Kubernetes へ遷移します。
今回、私のアカウントとしてACKは初めて起動するため、次のようなメッセージが表示されます。
image.png

青色のRAM consoleボタンをクリックし、RAMロールの権限付与をします。
image.png

そうすることで、Container Service ACK のコンソール画面が表示されます。ここからメイン作業となります。

image.png

右側の [Create Kubernetes Cluster] ボタンをクリックし、[Managed Kubernetes] Tabで 以下の構成通りに選定します。なお、内部接続を使用する場合は、クラスターが作業環境は同じVPCにする必要があります。

image.png
image.png
image.png
image.png
image.png

この設定で、[Create cluster] をクリックし、ターゲットclusterを作成します。現状初期化ステータスなので、しばらく待ちます。

image.png

しばらくすると、クラスターが正常に作成され、「実行中」のステータスになります。ノードの数によって作成時間は異なります。
image.png

作業環境でkubectlとhelmを準備します

作業環境にログインし、kubectlとhelmをインストールします。著者はCentOSなので、kubectlインストールドキュメントhelmインストールドキュメント を確認のうえ、インストールコマンドを引用しながら入力します。

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
$ kubectl version --client

image.png

helm release pageに基づいてhelmのバージョンを変更することもできます。

$ wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
$ tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
$ mv linux-amd64/helm /usr/local/bin/helm
$ helm version

image.png

ターゲットクラスターに Namespace を新たに作成

ターゲットクラスターにデプロイ用の Namespace を新たに作成します。名前は magento にします。
image.png

image.png

image.png

作業環境からターゲットクラスターへ接続設定

先述の作業環境から、ターゲットクラスターへの接続をするために認証情報取得、設定等構成作業をします。
Cluster Information に移動し、Connection Information タブから、 Generate Temporary kubeconfig ボタンを押すことで、kubectlの一時接続構成の認証情報を作成します。
詳細については、Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster(クラスタのkubeconfigファイルを取得し、kubectlを使ってクラスタに接続する) を参照してください。こちらの説明よりHelpドキュメントの説明がより詳しいと思います。

また、パブリックアクセスを使用する場合は、Control public access to the API server of a cluster を参照してください。

image.png

image.png
image.png

作成された認証情報をコピーして、先ほどの作業環境にて、認証情報を追加します。CentOSの場合、 /root/.kube/config に貼り付けとなります。

image.png

kubectlコマンドを使って、接続を確認します。

$ kubectl get namespace
$ kubectl get pods
$ kubectl get pods -n magento

image.png

疎通できているので、次のステップへ進めます。helm がクラスターへ接続するコンテキストを設定します。

kubectl config current-context
kubectl config set-context magento --namespace magento

image.png

以降、作業環境にて、helm を使いながら、ACKを操作します。

Helm chartでMagentoサービスをインストール

helmで必要なリポジトリを追加します

$ helm -n magento repo add bitnami https://charts.bitnami.com/bitnami
$ helm -n magento repo list

image.png

WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /root/.kube/config

上記のような警告メッセージが表示された場合は、設定ファイルの権限を更新します。

$ chmod g-r /root/.kube/config
$ chmod o-r /root/.kube/config

image.png

Helm で Magento をデプロイ

ここまでの作業が順調であれば、Helm で Magento をデプロイします。

$ helm -n magento install magento-demo bitnami/magento

image.png

この結果は ACK側でもどうなったかみてみましょう。先ほどの Alibaba Cloud ACK コンソール画面でリソースがデプロイされることを確認します。

image.png

無事反映されていることがわかりますね。引き続き作業環境に戻り、リストされている関連コマンドを実行します。 Load BalancerのIPアドレスが使用可能になるまで、数分かかります。

image.png

image.png

おや、最後の「2. Complete your Magento deployment by running: 」でエラーが出ているようです。
こちら Docker Hub のRepo を確認してみます。
image.png

今回の「2. Complete your Magento deployment by running: 」の Error: version is explicitly required for OCI registries を対処するべく、Helmのチャートのバージョンを明示的に指定します。

$ helm upgrade magento-demo oci://registry-1.docker.io/bitnamicharts/magento --version 24.1.2 --namespace magento --set magentoHost=$APP_HOST,magentoPassword=$APP_PASSWORD,mariadb.auth.rootPassword=$DATABASE_ROOT_PASSWORD,mariadb.auth.password=$APP_DATABASE_PASSWORD

image.png

これで無事通りました。コンソールの Namespace magento でPod のステータスを確認します。 0/3 nodes are available: pod has unbound immediate PersistentVolumeClaims. , preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.. エラーメッセージが表示されていますね。

ターミナルから pvc および pv を確認してみたところ、PVC がバインドされていないことがわかります。

$ kubectl get pvc
$ kubectl get pv

image.png

今回 Magent 作成用の StorageClass を確認してみます。

$  kubectl get pvc -n magento

StorageClass 一覧にて、詳細を確認するところ、data-magento-demo-elasticsearch-data-0、data-magento-demo-elasticsearch-master-0 にはStorageClassが指定されていないことがわかりました。

$  kubectl describe pvc data-magento-demo-elasticsearch-data-0 -n magento
$  kubectl describe pvc magento-demo-elasticsearch-master-0 -n magento

image.png

著者も少し行き詰まってたのですが、これは、Helm チャートのデフォルトの PV タイプが Alibaba Cloud 側で受け入れられないことが原因です。なので、コンソールで PVC(Persistent Volume Claims) 情報を手動で更新する必要があります。

コンソール画面でPVCステータスを確認します。すべて必要なPVCが「Pending」ステータスになっており、PVタイプが認識されていない状態です。

image.png

ターゲットクラスターでサポートされているストレージクラスを確認します。

image.png

この情報に基づいて、data-magento-demo-elasticsearch-data-0 のyamlファイルを確認します。どうやら storageClassName: alicloud-disk-ssd が追加されてなかったので、追記し、アップデートします。

image.png

image.png

残りの3つ data-magento-demo-elasticsearch-master-0 data-magento-demo-mariadb-0 magento-demo-magento も同じ操作をします。

image.png

この作業において詳細については Use a dynamically provisioned disk volume を参照してください。

Pods 一覧リストに戻り、すべてのPod が「Running」ステータスになるまで待ちます。

image.png

Service で MagentoサービスのURLを取得します。

image.png

Webブラウザにて、上記のURLを張り付けると、ページが表示されます。

image.png

URLにデフォルトで /adminを追加することで、Admin管理サービスへ移ります。

image.png

先ほどの作業環境コンソールで、コマンドを使用して、生成されたパスワードを取得し、ログインします。

image.png

これで、Magento へ入ることができました。

image.png

さいごに

PVCおよびPVの問題で少し行き詰まりましたが、元々Alibaba Cloud の Container Service for Kubernetes (ACK) は Kubernetes を100%サポートしており、自由かつ拡張性があるため、好きにカスタマイズできたので、こういった問題もすんなり解決できました。実質clusterを立ち上げてから、1時間もしないうちに Magent サービスを立ち上げることができました。これは Alibaba Cloud の Kubernetesの強みともいえるので、Magentoをさくっと立ち上げたい方はお試しにしてみるのもいかがでしょうか。

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