kubernetes로 wordpress 환경 구축
apache와 php 환경을 kubernetes로 구축
부터 계속됩니다.
디렉토리 구성
$ workspace .
├── app
| └── wordpressのパッケージ
└── docker
├── db
│ ├── create_schema.sql(新規)
│ └── Dockerfile(新規)
├── apache-php
│ ├── vhost.conf
│ └── Dockerfile
├── templates
| ├── mysql-deploy.yaml(新規)
| ├── mysql-pv.yaml(新規)
| ├── mysql-pvc-claim.yaml(新規)
| ├── mysql-service.yaml(新規)
| ├── secret.yaml(新規)
| ├── strageclass.yaml(新規)
| └── main.yaml
└── skaffold.yaml
StorageClass
스토리지 유형을 나타내는 객체
kubernetes.io/gce-pd
kubernetes.io/aws-ebs
kubernetes.io/glusterfs
등
Provisioner
Dynamic Provisioning이란?
PersistentVolume이란?
영속화 영역으로 확보되는 Volume
PersistentVolumeClaim이란?
PersistentVolume은 PersistentVolumeClaim을 통해 사용되는 형태로 지속성 영역을 요청하는 리소스입니다.
데이터베이스 작성을 위한 스키마 준비
create_schema.sql
create database `wordpress`;
use `wordpress`;
MySQL Docker 준비
MySQL Dockerfile 만들기
FROM mysql:5.7.22
COPY ./create_schema.sql /docker-entrypoint-initdb.d/
mysql manifest 만들기
mysql-service.yaml
apiVersion: v1
kind: Service # リソースの種類
metadata:
name: mysql # Serviceリソース名
labels:
app: dev # Serviceリソースmのラベル名
spec:
ports:
- port: 3306 # ServiceのPort
selector:
app: dev
tier: db
type: NodePort
mysql-deploy.yaml
apiVersion: apps/v1beta2
kind: Deployment # リソースの種類
metadata:
name: mysql # Deploymentリソース名
labels:
app: dev # Deploymentリソースのラベル名
spec:
selector:
matchLabels: # 等価比較
app: dev # app=devのpodを指定
tier: db # tire=dbのpodを指定
strategy: # Podを置き換えるときの戦略
type: Recreate #一度すべてのPodを削除してから新たなPodを起動
template: # Pod Templateを指定
metadata:
labels:
app: dev
tier: db
spec:
containers:
- image: k8sdemo/db:latest # コンテナイメージ
name: mysql # コンテナ名
env: # 環境
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef: # 環境変数としてSeacretを取り込む
name: mysql-secret # 環境変数として取り込みたい secret の名前
key: rootPassword # 環境変数として取り込みたい値の名前、この場合 rootPassword
ports:
- containerPort: 3306 # ContainerのPort番号
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Pod内のmount位置
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc-claim
mysql 비밀번호 정보를 관리하는 매니페스트 만들기
secret.yaml
apiVersion: v1
kind: Secret # リソースの種類
metadata:
name: mysql-secret # リソース名
type: Opaque # 通常のパスワード管理で指定するtype
data:
rootPassword: c29waGlhd2ViZGV2 # password(Base64エンコード)
mysql의 스토리지 정보를 관리하는 manifest 만들기
strageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass # リソースの種類
metadata:
name: ss-db # リソース名
provisioner: kubernetes.io/no-provisioner # Dynamic Provisioningが非サポートとのため、kubernetes.io/no-provisionerを指定
mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume # リソースの種類
metadata:
name: demo-local-pv # PersistentVolumeリソース名
labels:
type: local # Docker for macを使用しているためlocalを指定
spec:
storageClassName: ss-db # storageClassを指定
capacity:
storage: 20Gi # strage容量
accessModes:
- ReadWriteOnce # 単一Nodeで読み書きが可能
hostPath:
path: "/Users/ytada/Documents/k8sdemo/docker/db/data" # ローカルPCの適当なパスを指定
mysql-pvc-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim # リソースの種類
metadata:
name: mysql-pvc-claim # リソース名
labels:
app: dev
spec:
storageClassName: ss-db # 使用するStrageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
skaffold를 편집하여 클러스터에 배포
skaffold.yaml
apiVersion: skaffold/v1alpha2
kind: Config
build:
tagPolicy:
sha256: {} #コンテナのTagをハッシュ
artifacts:
- imageName: k8sdemo/php-apache # apache-phpのコンテナ
workspace: ./docker/apache-php # apache-phpのworkSpace
- imageName: k8sdemo/db # dbのコンテナ
workspace: ./docker/db # dbのworkSpace
local:
deploy:
kubectl:
manifests: # 監視対象のyamlファイルを指定
- ./templates/main.yaml
- ./templates/mysql-deploy.yaml
- ./templates/mysql-pv.yaml
- ./templates/mysql-pvc-claim.yaml
- ./templates/mysql-service.yaml
- ./templates/secret.yaml
- ./templates/strageclass.yaml
※skaffold에 대해서는 「 개발 환경의 kubernetes에 skaffold를 사용한 자동 배포 」를 참조해 주십시오.
WordPress 설치
서비스를 확인합니다.
Reference
이 문제에 관하여(kubernetes로 wordpress 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_r_5376/items/681ff32605ca334b73fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)