はじめに
kubernetesの概念を理解したく、実際に触ってみようということでEKSを使用してみました。あくまでも検証用です。
流れ
- VPCの作成(Terraform)
- EKS Clusterの作成(コンソール)
- ノードグループ作成(コンソール)
- RDS作成(Terraform)
クラスタやノードグループ作成については公式ドキュメントや記事を挙げられている方が多いため、WordPressのマニフェストにフォーカスします。
構成
ディレクトリ
eks-wordpress/
├── manifests/
│ ├── namespace.yaml
│ ├── secrets/
│ │ └── mysql-secret.yaml
│ ├── wordpress/
│ │ ├── deployment.yaml
│ │ └── service.yaml
│
├── terraform/
│ ├── main.tf
│ ├── terraform.tfvars
│
├── modules/
│ ├── vpc/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
│ ├── rds/
│ │ ├── main.tf
│ │ ├── variables.tf
│ │ └── outputs.tf
[Kubernetesクラスタ]
│
├── Namespace: wordpress
│ ├── Pod: wordpress
│ └── Secret: mysql-pass
前提リソース
ノードグループ
とりあえずPodが確実にRunningするノードにします。
マニフェスト
../manifests/wordpress/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: wordpress
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
env:
- name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: mysql-pass
key: host
- name: WORDPRESS_DB_NAME
valueFrom:
secretKeyRef:
name: mysql-pass
key: name
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysql-pass
key: user
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: wordpress
../manifests/secrets/mysql-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
namespace: wordpress
type: Opaque
stringData:
host: <RDSのエンドポイント>:3306
name: wordpress
user: admin
password: Password123
適用
$ kubectl apply -R -f manifests/
確認
WordPressのServiceがALB経由で外部公開
$ kubectl get svc -n wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress LoadBalancer ***.***.***.*** aaaaa.ap-northeast-1.elb.amazonaws.com 80:30287/TCP 5h42m
WordPressのPodが2つ、異なるノード(AZ)に分散して正常稼働
$ kubectl get pods -n wordpress -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-7969dcd877-7c4mc 1/1 Running 0 36m 10.0.0.65 ip-10-0-0-198.ap-northeast-1.compute.internal <none> <none>
wordpress-7969dcd877-tfpfr 1/1 Running 0 27s 10.0.1.126 ip-10-0-1-78.ap-northeast-1.compute.internal <none> <none>
WordPress
最後に
今回は使ってみることが目的であったためコンソールを使用しての作成であったが、次回は全リソースの構築とアプリのデプロイも自動化してみる。