Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes で構築する PHP 開発環境 / php-development-environment-on-kubernetes

shin1x1
December 01, 2019

Kubernetes で構築する PHP 開発環境 / php-development-environment-on-kubernetes

2019/12/01 PHP カンファレンス

shin1x1

December 01, 2019
Tweet

More Decks by shin1x1

Other Decks in Programming

Transcript

  1. 本発表について 開発環境に限定した内容 Mac 等の開発 PC 環境 本番環境に k8s を利用する話ではない Kubernetes

    のみで構築 Helm や Kustomise といったツールは利用しな い サンプルコード https://github.com/shin1x1/laravel-k8s-dev- sample 4
  2. kubernetes 実行環境 実行環境が必要。開発 PC にインストール。 Docker Desktop for Mac (

    旧: Docker for Mac) 手軽にやるなら、これ minikube Kind などなど 6
  3. Pod apiVersion: v1 kind: Pod metadata: name: sample-php # <---

    Pod name spec: containers: - image: nginx:1.14 # <--- docker image name: nginx ports: - containerPort: 80 # expose port (snip) # docker image - image: shin1x1/php-dev:7.4.0-fpm-buster-pgsql name: php-fpm 9
  4. Con gMap 2 つのファイルをデータとして保持している apiVersion: v1 kind: ConfigMap metadata: name:

    sample-php-fpm data: php.ini: | ; timezone date.timezone = Asia/Tokyo (snip) www.conf: | [www] pm.status_path = /phpfpm_status 11
  5. PHP の Pod で Volume としてアタッチして、 volumes: - name: php-fpm-config

    configMap: name: sample-php-fpm volumeMounts でファイルシステムにマウントする volumeMounts: - mountPath: /usr/local/etc/php/conf.d/zzmyphp.ini subPath: php.ini name: php-fpm-config - mountPath: /usr/local/etc/php-fpm.d/zzmyphp-fpm.conf subPath: php-fpm.conf name: php-fpm-config 12
  6. Service k8s クラスタ内では、http://sample-php:8000/ 、 ホストからは http://localhost:8000/ で通信 apiVersion: v1 kind:

    Service metadata: name: sample-php spec: type: LoadBalancer ports: - name: "8000" port: 8000 # expose port targetPort: 80 # pod port selector: app: sample role: web 14
  7. 16

  8. ホストディレクトリのマウント Pod の Volume で hostPath を指定 ホストのパスを直書きする必要がある volumes: -

    name: host hostPath: # マウントするホストのパスを指定 path: /Users/hoge/path/to/projects 19
  9. Xdebug によるリモートデバッグ xdebug.remote_host でホストを指定 Docker Desktop なら docker.for.mac.localhost xdebug.remote_enable =

    On xdebug.remote_autostart = On xdebug.remote_connect_back = Off xdebug.remote_host = docker.for.mac.localhost docker-compose の環境構築と理屈は同じ 21
  10. phpunit 等の CLI 実行 kubectl exec で Pod 内でコマンドを実行 -c

    でコンテナを指定 $ kubectl exec sample-php -c php-fpm \ -- ./vendor/bin/phpunit PhpStorm 連携は無いので、シェルで実行 (これは地味に辛いところ) 22
  11. Make le でまとめる make install で構築 install: k8s-apply composer cp

    -a .env.example .env kubectl exec sample-php -c php-fpm -- ./artisan key:generate kubectl exec sample-php -c php-fpm -- ./artisan migrate kubectl exec sample-php -c php-fpm -- ./artisan db:seed .PHONY: install k8s-apply: sed "s#%HOST_PATH%#${PWD}#" k8s/php.yaml.base > k8s/php.yaml kubectl apply -f k8s/ kubectl wait all -l app=sample --for condition=Ready --timeout composer: docker run --rm -v `pwd`:/opt -w /opt --entrypoint '' composer 23
  12. CI 環境の構築 - CircleCI - 2019/12 現在、k8s 実行環境の提供は無い 各自で環境構築する必要がある Orbs

    にいくつか k8s 関連はあるが、 クライアントツール Kind で環境構築 k8s in Docker https://kind.sigs.k8s.io 26
  13. Kind のインストール .circleci/con g.yaml curl -Lo ./kind https://github.com/kubernetes-sigs/kind /releases/download/v0.5.1/kind-$(uname)-amd64 chmod

    +x ./kind perl -pi -e "s#%HOST_PATH%#`pwd`#g" \ .circleci/kind-config.yaml ./kind create cluster \ --config .circleci/kind-config.yaml --wait 5m 27
  14. 現在取り組んでいるプロジェクト Helm / helm le を活用 本番、検証、開発、CI 環境を 1 ソースで構築

    環境ごとの違いを吸収 つまり複雑 本番環境用のものを拡張して、開発環境を構築 開発環境だけなら、もっとシンプルにできそう でも楽しい! 35