DX station

Sitecore を AKS に展開する

human03

神村

皆さま、こんにちは。神村です。

前回はローカル PC(Windows 10 Pro)にインストールした Docker Desktop 上で、Sitecore のコンテナを起動、開発するための流れをご紹介しました。
コンテナを利用すると、とても簡単に Sitecore の開発が進められる、ということをわかっていただけたと思います。

今回は、開発したコンテナを、Azure(AKS:Azure Kubernetes Service)へデプロイ(反映)する流れをご紹介させていただきます。

前回より少し難しくなりますが、実際にお客様がご利用になられる Sitecore のサーバー環境が、コンテナの場合だとこんな流れで構築されているんだな、というのをお伝えできればと思っています。

前回までの記事をもしまだ読まれていない方は、事前にご一読ください。

Sitecore をコンテナで導入するメリット
Sitecoreを Docker で構築する



導入からデジタルマーケティングのコンサルティングまでご支援 - Sitecore on Cloud 詳細はこちら


STEP1 事前準備

まずは Azure サブスクリプションへコンテナを展開するにあたって使用するツールをローカル PC にインストールします。
実際に構築するにあたって、Chocolatey や Terraform は必須ではありませんが、今回の手順では構築を楽に行うために使用しています。

  • Chocolatey
  • Azure CLI
  • Terraform
  • kubectl
  • Helm

▼Chocolatey
https://chocolatey.org/
Windows 用のパッケージ管理ソフトウェアです。
様々なツールをコマンドでインストールすることができます。

▼Azure CLI
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli
Azure リソースを管理するためのコマンド群です。
Chocolatey を使用すると、コマンドでインストールすることができます。

▼Terraform
https://www.terraform.io/
インフラ構築や設定作業をコード化し、自動構築を行うための IaC ツールです。
このツールも Chocolatey を使用すると、コマンドでインストールすることができます。

▼kubectl
https://kubernetes.io/ja/docs/reference/kubectl/overview/
Kubernetes クラスタを管理するためのコマンド群です。
このツールも Chocolatey を使用すると、コマンドでインストールすることができます。

▼Helm
https://helm.sh/ja/
Kubernetes クラスタへのアプリケーションのデプロイを自動実行するためのツールです。
このツールも Chocolatey を使用すると、コマンドでインストールすることができます。

導入からデジタルマーケティングのコンサルティングまでご支援 - Sitecore on Cloud 詳細はこちら


STEP2 Azureリソースの準備

ツールをインストールしたら、Sitecore のコンテナを Azure 上で稼働させるために必要な Azure リソースを作成します。Azure CLIや Azure ポータルから作成ができますが、今回は IaC ツール(Terraform)を使って Azure リソースの展開を行います。

ローカル PC で、Terraform が使用する IaC ファイル(AKSや SQL Database、Redis などの構成ファイル)を準備したら、Terraform の init / apply コマンドを実行することで Azure リソースを作成することができます。

コマンドの実行例は省きますが、以下が、必要なリソースを作成したあとの Azure ポータル画面です。

Azure リソース
導入からデジタルマーケティングのコンサルティングまでご支援 - Sitecore on Cloud 詳細はこちら


STEP3 Sitecore コンテナを展開

Azure リソースの準備が整ったら、kubectl コマンドを使って AKS(Azure Kubernetes Service)へコンテナの展開を行います。
なお、今回はすでに展開する Sitecore のコンテナイメージが ACR(Azure Container Registry)へ格納されている状態で行います。
また、展開に必要な設定ファイル(マニフェスト)については、サイトコア社が管理する GitHub (※1)で公開されています。今回の記事ではマニフェストのダウンロードや編集に関する詳細な説明は割愛しますが、ダウンロードしたマニフェストに対して以下のような編集を行う必要があります。

  • ライセンスファイルを Base 64 の文字列に変換してマニフェストに記述する
  • 各種サーバー証明書を準備し、ドメイン名をマニフェストに記述する
  • Sitecore 管理者アカウントのパスワードやDBのパスワードをマニフェストに記述する
  • 各コンテナが参照するコンテナイメージのパスをマニフェストに記述する

上記の編集を行ったマニフェストを用意したら、kubectl コマンドを実行して AKS へコンテナを展開することができます。

今回の記事では Sitecore が管理している GitHub で公開されている Kubernetes マニフェストのうち、Sitecore 10.1 xp1をデプロイしています。以降のコマンドは、ダウンロードした Sitecore 10.1 xp1のディレクトリ(※2)で実行していきます。

※1. https://github.com/Sitecore/container-deployment/tree/master/k8s
※2. https://github.com/Sitecore/container-deployment/tree/master/k8s/sxp/10.1/ltsc2019/xp1

1.Powershellを起動し、AKSへの認証を通します
$subscriptionId = ""      # Azure サブスクリプションの ID を指定
$resourceGroupName = ""   # 展開した リソース グループ名を指定
$aksClusterName = ""      # 展開した AKS クラスタ名を指定

az login

az account set --subscription $subscriptionId

az aks get-credentials `
    --resource-group $resourceGroupName `
    --name $aksClusterName `
    --overwrite-existing

2.Secret をデプロイします
kubectl apply -k ./secrets/

3.データサービス(Solr)をデプロイします
kubectl apply -k ./external/

Solrができたことが確認できます。

データサービス デプロイ

※本番運用環境ではコンテナではなく SearchStax 等の外部サービスを利用する必要があります

4.データ初期化ジョブをデプロイします
kubectl apply -k ./init/

データ初期化ジョブが完了しました。

データ初期化ジョブ デプロイ

Database が作成されていることも確認できます。

Database デプロイ
5.PersistenceVolume をデプロイします
kubectl apply -f ./volumes/azurefile/sumbit-queue.yaml

submit-queueが作成されました。

PersistenceVolume デプロイ
6.Sitecore のアプリケーション(ロール)をデプロイします
kubectl apply -k ./

30分ほど待つと、Sitecore の各ロールが展開されていることが確認できます。

ロール デプロイ
7. IngressController をデプロイします
# 下記のサンプルのように Helm に NGINX Ingress Controller を追加します。
helm repo add stable https://kubernetes.github.io/ingress-nginx
helm repo update
# 下記のサンプルのように Helm を使用して NGINX Ingress Controller をデプロイします。
helm install nginx-ingress stable/ingress-nginx `
    --set controller.replicaCount=2 `
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux `
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux `
    --set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux `
    --set-string controller.config.proxy-body-size=10m

kubectl wait --for=condition=Ready Pods --selector app.kubernetes.io/instance=nginx-ingress `
 --field-selector metadata.namespace=sitecore-xp --all-namespaces

# デプロイしたいトポロジーのルートフォルダーから下記のコマンドを実行します。
kubectl apply -k ./ingress-nginx/

IngressController が作成されました。

IngressController デプロイ

上記が完了したら、IngressController のパブリックIPをローカル PC の hosts ファイルへ登録(※)します。
※本番運用環境では DNS に登録する形になります

ここまでの手順を完了すると、Sitecore の画面へアクセスできるようになります。
設定したドメインへアクセスし、ログインができるか確認します。

Sitecore Login

ログインして管理画面を開くことができました。

Sitecore Home

以上で、AKS へデプロイする流れの説明は終了です。

導入からデジタルマーケティングのコンサルティングまでご支援 - Sitecore on Cloud 詳細はこちら


おわりに

コンテナを AKS へ展開する流れについていかがでしたでしょうか。
IaC ファイルやマニフェストファイルの記述に関する説明は割愛しましたが、準備が整うと、Azure リソースやコンテナのデプロイが容易に行えるようになります。

コンテナの展開はコンテナイメージから行われるので、すぐに新しいコンテナへ差し替えることも可能ですし、新しく環境を立て直すのも簡単になります。

今回の記事は少し技術的な内容が多かったので、難しく感じる読者の方もいらっしゃったと思いますが、興味を持っていただけましたら是非お問い合わせください。

お問い合わせはこちら

Sitecore のコンテナに関する連載はこれで最後になります。
ここまで読んでくださった皆様、ありがとうございました!

なお、今回紹介した手順は、以下のサイトコア社のマニュアルを参考にしています。

Installation Guide for Production Environment with Kubernetes
https://dev.sitecore.net/Downloads/Sitecore_Experience_Platform/101/Sitecore_Experience_Platform_101.aspx

関連ブログ記事

Sitecore をコンテナで導入するメリット
Sitecore を Docker で構築する


関連ページ

導入からデジタルマーケティングのコンサルティングまでご支援 - Sitecore on Cloud


【総合】お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録