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

Kubernetes で構築する PHP 開発環境 / php-development-env...

Avatar for shin1x1 shin1x1
December 01, 2019

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

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

Avatar for shin1x1

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