イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

kubernets でNginx php-fpm コンテナをデプロイする

皆様こんばんはこへです。
そろそろk8sを使って色々やっていきたい時期が来ましたので作成。

以前作った↑のアプリをk8sでデプロイしていきます。

構成

準備

GCRに NginxBusyboxPHP-FPMのimageをぶち込む

k8s20.png

今回は GKE を使用。

k8s10.png

こ~んな感じで指定していく

1 お金を掛けたくないのでmicroインスタンスを使用
2 nodeのスケールは3~6に指定
3 なんとなくus-westリージョン

Pod デザインパターン

↑にある Side Car もどき で作っていきます。
※本来はgit-syncを使って、連携したいところですが今回は時間の関係でbusyboxを使い、連携。

Example%2B%25231-%2BSidecar%2Bcontainers%2B.png

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: laravelconfig
data:
APP_NAME: ####
…

php-fpm Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php
  labels:
    app: php
spec:
  replicas: 3
  selector:
    matchLabels:
      app: php
  template:
    metadata:
      labels:
        app: php
    spec:
      containers:
        - name: php-fpm
          image: gcr.io/practice-gke-195901/ginee/phpfpm:v1
          imagePullPolicy: Always
          envFrom:  # env ではなく envFrom
          - configMapRef:
              name: laravelconfig
          ports:
            - containerPort: 9000
          volumeMounts:
          - mountPath: /var/www
            name: src-data
        - name: busybox
          image: gcr.io/practice-gke-195901/ginee/srcbusybox:v2
          imagePullPolicy: Always
          command: ["/bin/sh","-c"]
          args: ["cp -rf /var/www/laravel /opt && tail -f /dev/null"]
          volumeMounts:
          - name: src-data
            mountPath: /opt
      volumes:
      - name: src-data
        emptyDir: {}

PHP Service

apiVersion: v1
kind: Service
metadata:
  name: php
  labels:
    app: php
spec:
  ports:
  - port: 9000
    targetPort: 9000
    protocol: TCP
    name: php
  type: ClusterIP

  selector:
    app: php

Nginx Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ginee-nginx
  labels:
    app: ginee-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ginee-nginx
  template:
    metadata:
      labels:
        app: ginee-nginx
    spec:
      volumes:
        - name: srcdata
          emptyDir: {}
      containers:
      - name: nginx
        image: gcr.io/practice-gke-195901/ginee/nginx:v1
        imagePullPolicy: Always
        ports:
          - containerPort: 80
        volumeMounts:
          - mountPath: /var/www
            name: srcdata
      - name: busybox
        image: gcr.io/practice-gke-195901/ginee/srcbusybox:v1
        imagePullPolicy: Always
        command: ["/bin/sh","-c"]
        args: ["cp -rf /var/www/laravel /opt && tail -f /dev/null"]
        volumeMounts:
        - name: srcdata
          mountPath: /opt

確認

kubectl port-forward [nginx podname] 8080:80
をうち、 localhost:8080にアクセス!

ログイン画面がでてれば成功!

次やること

1 busyboxをgit-syncに変える
2 cloud sqlを使う
3 Horizontal pod scaleの設定をする。