展開し、公式strapiデモアプリ“FoodAdvisor”とKubernetes


インターネットユーザー数の一定の上昇で、非常に利用可能でスケーラブルなWebアプリを作成するための需要は、史上最高値です.は、企業が自己管理ハードウェア上で自分のサーバーを実行する日です.
クラウドコンピューティングの出現は、ソフトウェア開発のクラウド・ネイティブ・モデルに向けて、ギアをシフトさせた.クラウドネイティブは雲のプロバイダを使用して、それはクラウドコンピューティングモデルをフルに活用するオールインワンアプローチのアプリを提供するために使用します.
クラウドネイティブ展開では、アプリケーションはマイクロサービス指向であり、アプリケーションの各部分がコンテナ化されます.コンテナーは、リソースの利用を最適化する方法でスケジュールされていることを保証するためにオーケストレーションされます.これは、アプリケーションがユーザーロードに応じてパフォーマンスとスケールを意味します.このアプローチは、スケーリングされて手動で維持されなければならない従来のモノリスアプリケーションとは異なります.
Kubernetes 自動コンテナの配置、スケーリング、および管理に使用されるコンテナのオーケストレーションシステムです.Kubernetesのおかげで、スケールが微風であるコンテナ化アプリを実行します.複数の労働者マシンを組み合わせてクラスタを形成し、各ワーカーマシンはアプリケーションに関連する別のコンテナを実行します.
あなたがKubernetesに新しいならばofficial tutorials は優れた出発点です.

ヘッドレスCMSによるKubernetesの活用
コンテンツ管理システム(CMSE)長い間の周りされている.伝統的に、彼らは1つの場所からすべての内容、イメージ、HTML、CSSとJavaScriptを提供しているモノリシックアプリケーションでした.これは内容がビューに結び付けられているので内容を再利用することは困難であった.
エーheadless CMS 別のアプローチを取り、ビューからコンテンツを分離します.ヘッドレスのCMSでは、コンテンツはコンテンツを表示するために複数のクライアントが消費するAPIを介して提供されます.個々の部品をコンテナ化し、互いに独立してスケーリングすることができますので、この分離は、クラウド固有のアーキテクチャに最適です.
Strapi オープンソースツールはノードで書かれています.は、比類のないカスタマイズと超高速ヘッドレスCMSを提供しています.それを実行する方法を直接参照するには、strapiは公式デモアプリケーションを提供しますFoodAdvisor それはStraapiのウェブサイトでプレビューされるか、またはローカルで、または、クラウドで展開されることができます.FoodAdvisorアプリは、異なるレストランのリストを示し、Strapiの機能のデモとして機能します.
このチュートリアルでは、FoodAdvisorアプリを展開するKubernetesを活用する方法を学びます.

必要条件
続くには、Kubernetesクラスタの実行が必要になります.Kubernetesクラスタを提供するクラウドプロバイダを使用することができますGoogle's GKE or Amazon's EKS , または使用することができますMinikube クラスタをローカルに設定します.
このチュートリアルでは、Minikubeとローカルクラスタを使用していると仮定します.Minikubeをインストールすることができますguide .
また、インストールする必要がありますkubectl Kubernetesクラスタを制御する
あなた自身のコンテナ化されたDockerイメージを準備したいならば、あなたもインストールする必要がありますDocker . あなた自身のDockerイメージを作成したくないならば、あなたは私が準備したものを使うことができます.
ローカルクラスタが次のコマンドを実行していることを確認します.
minikube start
Minikube自動的に構成されますkubectl このローカルクラスタと通信するために、手動設定が必要ない.

Kubernetesを使用してFoodAdvisorアプリを展開する
Minikubeクラスタが稼働していると、KubernetesとFoodAdvisorアプリを展開することができます.

Docker画像の準備
最初のステップとして、FoodAdvisorをクローンする必要がありますGitHub repo . このチュートリアルではv2 FoodAdvisorアプリのoffers some improvements over the previous version .
git clone https://github.com/strapi/foodadvisor.git
cd foodadvisor
git checkout v2
repoでは2つのディレクトリが見られます:api and client . 最初のディレクトリは、バックエンドstrapiサーバーとデモデータを保持します.The client ディレクトリには、次に書かれたフロントエンドが含まれます.jsサーバーは、データベースとしてローカルSQLiteファイルを使用するので、このアプリを実行するために別のデータベースを設定する必要はありません.
Repoをクローニングした後に、バックエンドとフロントエンドのためにDockerイメージを準備します.あなたが必要になりますDocker Hub アカウントイメージをプッシュします.アカウントを作成したくない場合はDeploying the Backend そして、私がすでに準備したイメージを使ってください.
Dockerハブアカウントを作成した後、ユーザー名とパスワードをdocker login コマンド.
api ディレクトリを作成するDockerfile :
FROM node:14

WORKDIR /app
ADD ./package.json /app
ADD ./yarn.lock /app
RUN yarn install --frozen-lockfile

ADD . /app
RUN yarn seed

EXPOSE 1337

CMD ["yarn", "develop"]
エディット.env.example ファイルと設定CLIENT_URL 変数http://foodadvisor.client . 次に、同じディレクトリに次のコマンドを実行します.
docker build -t <your-docker-hub-username>/foodadvisor-api .
docker image push <your-docker-hub-username>/foodadvisor-api:latest
あなたのDockerハブのユーザー名を置き換えることを忘れないでください.
では、次のdockerfileを作成しますclient ディレクトリ
FROM node:16

WORKDIR /app
ADD ./package.json /app
ADD ./yarn.lock /app
ADD ./.env.development /app
RUN yarn install --frozen-lockfile

ADD . /app

EXPOSE 3000

CMD ["yarn", "dev"]
エディット.env.development ファイルと設定NEXT_PUBLIC_API_URL to http://foodadvisor.backend そして、以下のコマンドを実行します.
docker build -t <your-docker-hub-username>/foodadvisor-client .
docker image push <your-docker-hub-username>/foodadvisor-client:latest
今すぐDocker画像を使用するKubernetesの準備が整いました.

バックエンドの配備
Dockerイメージを準備すると、バックエンドをKubernetesクラスタに展開できます.The kubectl コマンドはクラスタとの通信を扱うために使用されます.kubectl 設定を宣言し、クラスタに適用します.
次の設定を保存しますdeploy-backend.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: foodadvisor-backend
spec:
  selector:
    matchLabels:
      app: foodadvisor
      component: backend
  template:
    metadata:
      labels:
        app: foodadvisor
        component: backend
    spec:
      containers:
      - name: foodadvisor-api
        image: heraldofsolace/foodadvisor-api
        ports:
          - containerPort: 1337
前の手順で独自のDocker画像を作成した場合はheraldofsolace/foodadvisor-api to <your-docker-hub-username>/foodadvisor-api .
YAMLファイルはDeployment 名前foodadvisor-backend . 展開はPod , 指定したDockerイメージを使用してコンテナを1つ実行します.
変更を適用します
kubectl apply -f deploy-backend.yaml
次のコマンドを実行すると、配備を確認できます.
kubectl get deployments

バックエンドはクラスタ内で実行中です.しかし、それはデフォルトで外の世界から隔離されます.クラスタの外部からサーバにリクエストを送ることができるようにするには、この場合、ポート1337に適切なポートを公開する必要があります.
kubectl expose deployment foodadvisor-backend --port 1337
これはService 以下のコマンドを実行して確認できます.
kubectl get services foodadvisor-backend


フロントエンドの配備
次のステップはフロントエンドを展開し、バックエンドに接続することです.次の保存deploy-frontend.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
  name: foodadvisor-frontend
spec:
  selector:
    matchLabels:
      app: foodadvisor
      component: frontend
  template:
    metadata:
      labels:
        app: foodadvisor
        component: frontend
    spec:
      containers:
      - name: foodadvisor-client
        image: heraldofsolace/foodadvisor-client
        ports:
          - containerPort: 3000
もう一度、あなた自身のDockerイメージをheraldofsolace/foodadvisor-client with <your-docker-hub-username>/foodadvisor-client .
バックエンドのように、このYAMLは指定されたDockerイメージを実行するPODを含む展開を作成します.
フロントエンドの配置に変更を適用します.
kubectl apply -f deploy-frontend.yaml
実行して展開を確認kubectl get deployments .

バックエンドと同様に、フロントエンドに到達するためにブラウザを使用できるようにポート3000を公開する必要があります.
kubectl expose deployment foodadvisor-frontend --port 3000
実行しているサービスを確認するkubectl get services foodadvisor-frontend .


侵入の作成
最後に、あなたはIngress クラスタに.イングルの仕事は、あなたが使用するURLに応じて、フロントエンドまたはバックエンドに着信リクエストをルーティングすることです.
以下の取得規則は、http://foodadvisor.backend 以前に作成したバックエンドサービスと、http://foodadvisor.client フロントエンドサービスに.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: main-ingress
spec:
  rules:
  - host: foodadvisor.backend
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: foodadvisor-backend
              port:
                number: 1337
  - host: foodadvisor.client
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: foodadvisor-frontend
              port:
                number: 3000
YAMLを保存するingress.yaml . InteressをminiKubeで使うのはこれが初めてです.
minikube addons enable ingress
NGinx Ingressコントローラが実行中であることを確認します.
kubectl get pods -n ingress-nginx

一度だけこのステップを実行する必要があります.最後にイングルを適用します.
kubectl apply -f ingress.yaml
最後のステップはホスト名を作ることですhttp://foodadvisor.backend and http://foodadvisor.client あなたのオペレーティングシステムに知られているので、あなたのブラウザでそれらを開くことができます.そのためには、minikubeクラスタのIPアドレスを知る必要があります.
minikube ip

エディット/etc/hosts そして最後に次の行を追加します.適切なIPアドレスを前の出力から置き換えます.
192.168.99.100  foodadvisor.client
192.168.99.100  foodadvisor.backend
これらの変更を適切にhttp://foodadvisor.backend and http://foodadvisor.client Interessコントローラが彼らを拾って、彼らの適切な目的地に彼らを送るあなたのminikubeクラスタに送られます.
訪問http://foodadvisor.backend/admin 管理パネルにアクセスするには.これが初めてであるので、管理ユーザを作成するよう求められます.

管理者ユーザーを作成したら、StreAPIのダッシュボードにアクセスし、あらかじめ設定されているサンプルデータを調べます.

フロントエンドにアクセスするにはhttp://foodadvisor.client . あなたはFoodAdvisorアプリのホームページを参照してくださいする必要があります.

おめでとう、KubernetesでFoodAdvisorを正常に展開しました.

結論
クラウドネイティブのアプローチは、近い将来アプリケーション開発のための事実上の標準になるだろう.このメソッドはモノリシックアプリケーションを廃止し、代わりにアプリケーションをスケーラブルな実行可能なマイクロサービスに分解します.ネットの結果を開発し、簡単に伝統的な展開を達成するのは難しいアプリケーションを管理することは簡単です.
このチュートリアルでは、簡単に公式のstrapiデモアプリケーションを展開するKubernetesで始めることができる方法を示した.この興味があれば、チェックアウトStrapi's website ヘッドレスCMSの詳細については.