본문 바로가기

⭐ Kubernetes & EKS/Kubernetes 예제

쿠버네티스 예제를 활용한 애플리케이션 개발 (1)

# 워드프레스 mysql 쿠버네티스 배포

cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass
  literals:
  - password=YOUR_PASSWORD
EOF
mkdir wordpress-project

mv kustomization.yaml wordpress-project/

cd wordpress-project/

# 리소스 다운받기

curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml

curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml

# 방금전 추가한 파일을 리소스에 추가한다.

cat <<EOF >>./kustomization.yaml
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml
EOF

# 패스워드를 변경하자

vim kustomization.yaml

# 실행

kubectl apply -k ./

kubectl get pod

- 관리자 페이지 접근 방법 > 접속 엔드포인트/wp-login.php

http://34.64.197.131/wp-login.php

- 서비스 및 인그레스를 통해서 엔드포인트로 접근이 가능하다.

# 스케일링 하기

kubectl scale deployment wordpress --replicas=3

kubectl get pod

- 워드프레스를 설치한다.

- 오류를 확인할때 : kubectl describe pod [pod이름]

# pod 을 스케일 아웃을 설정했을때 스케일 아웃이 안된다면 GCP가 지원을 하지 않기 때문이다.

- 수동으로 스케일 아웃을 수행하는 방법에 대해 알아보자.

# node 를 수동으로 지정해줘야 정상적인 스케일 아웃이 된다.

# 노드를 수동으로 지정하여 워드 프레스와 MYSQL 스케일링이 가능하도록 수정하기

# 모든 리소스 삭제하기

kubectl delete all --all

# pvc 를 삭제한다.

kubectl delete pvc [프로스세 name]

- all 옵션이 없으므로 1개씩 삭제 해주어야 한다.

vim kustomization.yaml
secretGenerator:
- name: mysql-pass
  namespace: wordpress
  literals:
  - password=YOUR_PASSWORD
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
vim mysql-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  namespace: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  namespace: wordpress
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  namespace: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      nodeSelector:
        app: mysql
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

- namespace 추가, kubernetes 공식사이트에서 nodeselector 검색하여 kind: 으로 검색 > spec 밑에 추가하기

vim wordpress-deployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  namespace: wordpress
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress
  namespace: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      nodeSelector:
        app: wordpress
      containers:
      - image: wordpress:4.8-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim

# wordpress 관련 namespace 생성하기

kubectl create ns wordpress

kubectl get node 를 입력하여 어떤 노드에 wordpress를 배치할 것인지 확인하기

# 해당 노드에 할당하기

kubectl label node [노드명] app=wordpress

kubectl label nodes gke-standard-cluster-1-default-pool-e6b621c9-aim9 app=wordpress

kubectl label nodes gke-standard-cluster-1-default-pool-e6b621c9-b51i app=mysql

# apply 수행하기

kubectl apply -k ./

# 네임스페이스에 등록된 pod 확인하기

kubectl get pod -n wordpress

# 워드 프레스 서비스 확인하기

구글 클라우드에서 > 서비스 및 수신 > 엔드포인트로 접근 > 한국어로 설치 진행 > 정상적으로 웹사이트 뜨는지 확인

# 스케일링 수행하기

- wordpress

kubectl scale -n wordpress deployment wordpress --replicas=3

- mysql

kubectl scale -n wordpress deployment wordpress-mysql --replicas=3

- 상태 지켜보기

kubectl get pod -w

kubectl get pod -w -n wordpress

- 스케일링 된 것을 확인 할 수 있다.