PHP デプロイのテスト

前提条件

概要

本節では Docker Desktop を使って、開発マシン上に実現されている Kubernetes のフル機能環境に向けたアプリケーションのデプロイ方法について学びます。 これによってデプロイ前に Kubernetes 上のワークロードをローカルにおいてテスト、デバッグすることができます。

Kubernetes YAML ファイルの生成

docker-php-sample ディレクトリ内に docker-php-kubernetes.yaml という名のファイルを生成します。 このファイルを IDE またはテキストエディターで開きます。 そして以下に示す内容を記述します。 DOCKER_USERNAME/REPO_NAME の部分は、自分の Docker ユーザー名、および PHP アプリケーション向け CI/CD の設定 において生成したリポジトリ名に置き換えてください。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: docker-php-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      hello-php: web
  template:
    metadata:
      labels:
        hello-php: web
    spec:
      containers:
        - name: hello-site
          image: DOCKER_USERNAME/REPO_NAME
          imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: php-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    hello-php: web
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30001

この Kubernetes YAML ファイルには --- によって区切られた 2 つのオブジェクトがあります。

  • デプロイメント。 スケール可能なポッドグループを記述します。 ここではレプリカを 1 とします。 つまりポッドを 1 つコピーします。 そのポッドは以下において template と記述されるものであり、その中にただ 1 つのコンテナーを持ちます。 このコンテナーは PHP アプリケーション向け CI/CD の設定 において GitHub アクションによってビルドしたイメージから生成されるものです。
  • NodePort サービス。 これはホスト上のポート 30001 をポッド内のポート 80 にトラフィックをルーティングします。 これによってネットワークからアプリにアクセスできるようになります。

Kubernetes オブジェクトについての詳細は Kubernetes ドキュメント を参照してください。

アプリケーションのデプロイとチェック

  1. 端末において docker-php-sample に移動し、アプリケーションを Kubernetes にデプロイします。

    $ kubectl apply -f docker-php-kubernetes.yaml
    

    実行結果は以下のようになるはずです。 つまり Kubernetes オブジェクトは正常に生成されたはずです。

    deployment.apps/docker-php-demo created
    service/php-entrypoint created
  2. デプロイの一覧を表示して、すべてがうまく動作していることを確認します。

    $ kubectl get deployments
    

    デプロイ結果は以下のように一覧表示されるはずです。

    NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
    docker-php-demo      1/1     1            1           6s

    この出力結果から、ポッドがすべて実行していることが分かります。 今回のサービスに関しても同じく確認します。

    $ kubectl get services
    

    以下のような出力結果が得られるはずです。

    NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP          7d22h
    php-entrypoint    NodePort    10.111.101.229   <none>        80:30001/TCP     33s

    デフォルトの kubernetes サービスに加えて php-entrypoint いうサービスが表示されます。 php-entrypoint サービスはポート 30001/TCP のトラフィックを受けつけます。

  3. ブラウザーを開いて http://localhost:30001/hello.php にアクセスします。 アプリケーションを確認することができます。

  4. 以下のコマンドを実行してアプリケーションを終了します。

    $ kubectl delete -f docker-php-kubernetes.yaml
    

まとめ

本節では Docker Desktop を使って、開発マシン上に実現されている Kubernetes のフル機能環境に向けたアプリケーションのデプロイ方法について学びました。

関連情報