쿠버네티스 실전 어플리케이션 개발

신상우·2024년 1월 8일

쿠버네티스

목록 보기
26/26

2024-01-08

구글 gcp사용 클러스터 생성
터미널 열어서
1. kubectl get nodes
2. mysql 설치
https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass
  literals:
  - password=YOUR_PASSWORD
EOF
  1. mkdir wordpress-project
  2. mv kustomization.yaml ./wordpress-project
  3. cd wordpress-project > ls
  4. yaml 구조 보기

mysql

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: 
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_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

wordpress

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:6.2.1-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        - name: WORDPRESS_DB_USER
          value: wordpress
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-pv-claim
  1. curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
  2. curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
  3. 만든 yaml 파일 추가
    cat <>./kustomization.yaml
    resources:
  • mysql-deployment.yaml
  • wordpress-deployment.yaml
    EOF
  1. vim kustomization.yaml > 비밀번호 수정 처음 넣을떄 쉬운걸로 해도됨

  2. kubectl apply -k ./

  3. kubectl get pod 로 확인

  4. kubectl scale deployment wordpress --replicas=3

  5. kubectl describe pod wordpress-7768894db7-n7wrx 시

    Name:             wordpress-7768894db7-n7wrx
    Namespace:        default
    Priority:         0
    Service Account:  default
    Node:             gke-cluster-1-default-pool-bbd1db8d-z37s/10.128.0.7
    Start Time:       Mon, 08 Jan 2024 03:32:50 +0000
    Labels:           app=wordpress
                     pod-template-hash=7768894db7
                     tier=frontend
    Annotations:      <none>
    Status:           Pending
    IP:               
    IPs:              <none>
    Controlled By:    ReplicaSet/wordpress-7768894db7
    Containers:
     wordpress:
       Container ID:   
       Image:          wordpress:6.2.1-apache
       Image ID:       
       Port:           80/TCP
       Host Port:      0/TCP
       State:          Waiting
         Reason:       ContainerCreating
       Ready:          False
       Restart Count:  0
       Environment:
         WORDPRESS_DB_HOST:      wordpress-mysql
         WORDPRESS_DB_PASSWORD:  <set to the key 'password' in secret 'mysql-pass-42m7g6f928'>  Optional: false
         WORDPRESS_DB_USER:      wordpress
       Mounts:
         /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-qhfd9 (ro)
         /var/www/html from wordpress-persistent-storage (rw)
    Conditions:
     Type              Status
     Initialized       True 
     Ready             False 
     ContainersReady   False 
     PodScheduled      True 
    Volumes:
     wordpress-persistent-storage:
       Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
       ClaimName:  wp-pv-claim
       ReadOnly:   false
     kube-api-access-qhfd9:
       Type:                    Projected (a volume that contains injected data from multiple sources)
       TokenExpirationSeconds:  3607
       ConfigMapName:           kube-root-ca.crt
       ConfigMapOptional:       <nil>
       DownwardAPI:             true
    QoS Class:                   BestEffort
    Node-Selectors:              <none>
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
     Type     Reason              Age    From                     Message
     ----     ------              ----   ----                     -------
     Normal   Scheduled           2m34s  default-scheduler        Successfully assigned default/wordpress-7768894db7-n7wrx to gke-cluster-1-default-pool-bbd1db8d-z37s
     Warning  FailedAttachVolume  2m34s  attachdetach-controller  Multi-Attach error for volume "pvc-2f510c5b-3159-4552-bba7-51c7aeee0b7f" Volume is already used by pod(s) wordpress-7768894db7-jzhbx
     Warning  FailedMount         31s    kubelet                  Unable to attach or mount volumes: unmounted volumes=[wordpress-persistent-storage], unattached volumes=[wordpress-persistent-storage], failed to process volumes=[]: timed out waiting for the condition
    
  6. GCP는 disk에 여러게 노드를 붙일수없음

스케일 할수있게 설정 하려면

a.kubectl delete all --all, kubectl delete pvc mysql-pv-claim,
kubectl delete pvc wp-pv-claim
b. vim
모든 metadata 밑에 namespace: wordpress 추가
nodeSelector 검색후
https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes/
spec: 밑에 띄워쓰기 주의!! :wq 저장 하고나가기

nodeSelector:
    app: mysql

c. 똑같이 namespace: wordpress 추가 strategy: type: Recreate 삭제
spec:
nodeSelector:
app: wordpress
containers:
추가
17. kubectl create ns wordpress
18. kubectl get node > kubectl label node gke-cluster-1-default-pool-bbd1db8d-17mq app=wordpress
kubectl label node gke-cluster-1-default-pool-bbd1db8d-p4z4 app=mysql
19. vim kustomization.yaml 에 namespace: wordpress 추가
20. kubectl apply -k ./

sbnsfl99@cloudshell:~/wordpress-project (shinsang-2023-12-26)$ kubectl apply -k ./
secret/mysql-pass-42m7g6f928 unchanged
service/wordpress created
service/wordpress-mysql created
persistentvolumeclaim/mysql-pv-claim created
persistentvolumeclaim/wp-pv-claim created
deployment.apps/wordpress created
deployment.apps/wordpress-mysql created
  1. kubectl get pod -n wordpress 확인
  2. kubectl scale -n wordpress deployment wordpress --replicas=3 레플리카스 3개로 바꾸고
    kubectl scale -n wordpress deployment wordpress-mysql --replicas=3
  3. kubectl get pod -w -n wordpress 3개씩 붙어있는거 확인

Horizontal Pod Autoscaling(HPA)

  1. kubectl delete all --all -n wordpress
    kubectl delete pvc -n wordpress wp-pv-claim
    kubectl delete pvc -n wordpress mysql-pv-claim
  2. resoucelimt
  3. vim wordpress-deployment.yaml
    resources:
        requests:
          memory: "500Mi"
          cpu: "100m"
        limits:
          memory: "1024Mi"
          cpu: "300m"
  4. vim mysql-deployment.yaml

resources:
requests:
memory: "256Mi"
cpu: "50m"
limits:
memory: "512Mi"
cpu: "100m"

  5.  kubectl apply -k ./
  6. https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ 에서
  7. kubectl autoscale deployment 이름 --cpu-percent=50 --min=1 --max=10 네임스페이스
  kubectl autoscale deployment wordpress --cpu-percent=50 --min=1 --max=10 wordpress
  kubectl autoscale deployment wordpress-mysql --cpu-percent=50 --min=1 --max=10 wordpress
  8. kubectl get hpa -w-n wordpress  확인!
  
  
  최종본
![](https://velog.velcdn.com/images/ssw0220/post/5179e86c-25fb-43f7-b2e2-3967c043baa5/image.png)
  
profile
기록 남기기

0개의 댓글