0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EKSでWordPress構築

Posted at

はじめに

kubernetesの概念を理解したく、実際に触ってみようということでEKSを使用してみました。あくまでも検証用です。

流れ

  • VPCの作成(Terraform)
  • EKS Clusterの作成(コンソール)
  • ノードグループ作成(コンソール)
  • RDS作成(Terraform)

クラスタやノードグループ作成については公式ドキュメントや記事を挙げられている方が多いため、WordPressのマニフェストにフォーカスします。

構成

構成図.png

ディレクトリ

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するノードにします。

  • インスタンスタイプ:t3.medium
  • ノード数2
    20250403_000018.JPG

20250403_000019.JPG

マニフェスト

../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

20250403_000015.JPG

最後に

今回は使ってみることが目的であったためコンソールを使用しての作成であったが、次回は全リソースの構築とアプリのデプロイも自動化してみる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?