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

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
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
vim kustomization.yaml > 비밀번호 수정 처음 넣을떄 쉬운걸로 해도됨
kubectl apply -k ./
kubectl get pod 로 확인
kubectl scale deployment wordpress --replicas=3
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
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
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 확인!
최종본
