[AIVLE_AI] 가상화 클라우드 1일차
Hello, SOOON_ZERO! [AIVLE_AI] 가상화 클라우드 1일차 본문
sooonzero.tistory.com
[AIVLE_AI] 가상화 클라우드 2일차
Hello, SOOON_ZERO! [AIVLE_AI] 가상화 클라우드 2일차 본문
sooonzero.tistory.com
[AIVLE_AI] 가상화 클라우드 3일차
Hello, SOOON_ZERO! [AIVLE_AI] 가상화 클라우드 3일차 본문
sooonzero.tistory.com
가상화 클라우드 3일차에서 했던 정리 내용
실습 환경
- AWS의 CLOUD9
Cloud IDE - AWS Cloud9 - AWS
AWS Cloud9은 브라우저만으로 코드를 작성, 실행 및 디버깅할 수 있는 클라우드 기반 IDE(통합 개발 환경)입니다. 코드 편집기, 디버거 및 터미널이 포함되어 있습니다. Cloud9은 JavaScript, Python, PHP를
aws.amazon.com
사용 언어
- 리눅스 명령어
현재 사용중인 쿠버네티스에서 사용 가능한 컨트롤러 목록 조회
kubectl api-resources
ls
폴더 내부에 조회
yaml 파일 편집: vi 편집기 사용
vi pod.yaml
POD
1. Pod 조회
kubectl get pods
kubectl get pod
kubectl get po
-> 3중 택1 방법 활용, 모두 다 같은 결과를 가져옴
2. yaml 확인
cat pod.yaml
3. yaml 을 활용한 Pod 생성
kubectl create -f pod.yaml
-> 2번에서 조회한 metadata의 name lab2-pod가 생성됨을 알 수 있다.
4. Pod 조회 및 세부정보 확인
kubectl get po (세부정보)
kubectl describe po (상세정보)
-> READY
실제 생성되어 실행되는 컨테이너 개수/스펙에 넣은 컨테이너 개수
->로그도 확인가능
+)kube-system pod 조회
쿠버네티스를 배포하면 기본적으로 만들어지는 아키텍처를 구성하는 pod들을 확인할 수 있다.
5. Pod 삭제
kubectl delete po kubectl delete po --all
->all은 모든 pod 삭제, 사진처럼 pod를 지정해서 삭제도 가능하다.
6. Pod 조회
kubectl get pod
7. run 명령을 사용한 pod 생성
kubectl run lab2-pod --image=nginx --port=80
조건: pod name : lab2-pod container image : nginx container port : 80
8. 7과정 에서 생성한 pod 조회
kubectl get po kubectl describe po
9. 7에서 생성한 pod 삭제
kubectl delete pod lab2-pod kubectl delete pod --all
Namespace
1. Namespace 확인
kubectl get namespace kubectl get ns
kubectl get namespace kubectl get namespaces
2. yaml 확인
cat ns.yaml
3. yaml 을 활용한 namespace 생성
kubectl create -f ns.yaml
4. Namespace 재확인
kubectl get ns
5. lab3-ns namespace 안에 pod 생성
kubectl create -f pod.yaml -n lab3-ns
-n lab3 -ns가 없다면 default 공간에 생성, -n lab3 -ns을 써줌으로써 생성되는 타켓 설정
6. pod 확인
kubectl get po kubectl get po -n lab3-ns
7. pod2.yaml 확인
cat pod2.yaml
8. pod2.yaml 생성
kubectl create -f pod2.yaml
9. 5에서 생성한 Pod 삭제
kubectl delete pod lab3-pod -n lab3-ns
10. pod 재확인
kubectl get pod -n lab3-ns
11. 3에서 생성한 Namespace 삭제
kubectl delete ns lab3-ns
-> Namespace 안에있는 리소스도 같이 삭제되기 때문에 상대적으로 시간이 걸림
12. create, run 명령으로 namespace 와 pod 생성
-namespace 조건
namespace name : lab3-ns2
-pod 조건
pod name : lab3-pod3
namespace : lab3-ns2
container image : nginx
container port : 80
kubectl create ns lab3-ns2
kubectl run lab3-pod3 --image=nginx --port=80 -n lab3-ns2
-와 - -의 차이점: -는 약어, --는 이미지를 표시하기위한 풀네임
13. 10에서 생성한 namespace와 pod 조회
kubectl get ns kubectl get pod -n lab3-ns2
14. namespace 삭제로 해당 namespace에 있던 리소스 모두와 함께 삭제
kubectl delete ns lab3-ns2
15. 삭제 확인
kubectl get ns
Replicaset
1. Replicaset 확인
kubectl get replicaset kubectl get rs
-> replicasets의 약어는 rs 이기 때문에 둘 다 사용 가능
2. yaml 확인
cat rs.yaml
-> api버전 apps.v1
*) kubectl api-resources | grep rs
명령어를 통해서 아래와 같이 확인할 수도 있다.
3. yaml 을 활용한 replicaset 생성
kubectl create -f rs.yaml
4. replicaset, pod 확인
kubectl get rs kubectl get rs
kubectl get rs kubectl get pod
->이름 / 2개 설계 / 2개 생성 / 2개 사용가능
5. pod 1개 삭제
kubectl delete pod
6. pod 재배포 확인
kubectl get pod
*)pod를 다 지워도 다시 새로운 pod가 생성되는것을 볼 수 있다.
7. replicaset 삭제
kubectl delete rs --all
-> replicaset을 삭제했더니 pod가 삭제된것 확인 가능.
8. replicaset 삭제 확인
kubectl get rs kubectl get rs
Deployment
1. Deployment 확인
kubectl get deployment kubectl get deploy
->deploy도 가능
2. yaml 확인
cat deploy.yaml
3. yaml 을 활용한 Deployment 생성
kubectl create -f deploy.yaml
4. deployment, replicaset, pod 확인
kubectl get deploy
kubectl get rs
kubectl get pod
-> READY에 표시되는 개수는 pod의 개수
5. pod 1개 삭제
kubectl delete pod
6. pod 재배포 확인
kubectl get po
7. Deployment 삭제
kubectl delete deploy --all
8. Deployment 삭제 확인
kubectl get deploy kubectl get pod
9. 터미널을 하나 더 오픈하여 모니터링용 터미널을 생성합니다.
watch -n 0.5 kubectl get pod
10. create 명령으로 deployment 생성
-deployment 조건
deployment name : lab5-deploy2 container image : nginx:1.14.0 container port : 80 replicas : 3 kubectl create deploy lab5-deploy2 --image=nginx:1.14.0 --port=80 --replicas=3
11. 컨테이너 이미지 1.15.0으로 버전 업데이트
kubectl set image deployment/lab5-deploy2 nginx=nginx:1.15.0 --record=true
이때 명령어 수행 직후 모니터링 터미널로 동작 확인 record=true 값으로 해야 히스토리 확인시 어떤 내용인지 확인 가능
12. 업데이트 내역 확인
kubectl describe pod kubectl describe deploy
13. 업데이트 방식 변경
kubectl edit deploy lab5-deploy2 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate 를 strategy: type: Recreate 로 수정합니다. vi 편집기 사용법과 동일합니다.
14. 컨테이너 이미지 1.16.0 으로 버전 업데이트
kubectl set image deployment/lab5-deploy2 nginx=nginx:1.16.0 --record=true 이때 명령어 수행 직후 모니터링 터미널로 동작 확인
15. 업데이트 내역 확인
kubectl describe pod kubectl describe deploy 16. 롤 아웃 기록 확인 kubectl rollout history deploy/lab5-deploy2
17. 직전 버전으로 롤백
kubectl rollout undo deploy/lab5-deploy2
18. 버전 확인
kubectl describe deploy
19. 리비전 지정하여 롤백
kubectl rollout undo deploy/lab5-deploy2 --to-revision=1
20. 버전 확인
kubectl describe deploy
21. 스케일링
kubectl scale deploy/lab5-deploy2 --replicas=5
22. 결과 확인
kubectl get pod kubectl describe deploy
23. deployment 삭제
kubectl delete deploy --all
ClusterIP Service
1. Service 조회
kubectl get service kubectl get svc
2. yaml 확인
cat pod.yaml cat svc-clusterip.yaml
3. yaml 을 활용한 ClusterIP 유형의 Service및 pod 생성
kubectl create -f svc-clusterip.yaml kubectl create -f pod.yaml
4. 위 3에서 만든 리소스 확인
kubectl get pod kubectl get svc
5. curl 명령을 통한 통신 확인
curl :9090 4에서 확인한 IP를 입력합니다.
6. 리소스 삭제
kubectl delete pod,svc --all
NodePort Service
1. yaml 확인
cat pod.yaml cat svc-nodeport.yaml
2. yaml 을 활용한 NodePort 유형의 Service및 pod 생성
kubectl create -f svc-nodeport.yaml kubectl create -f pod.yaml
3. 생성된 Service 확인
kubectl get svc
4. Worker1 로의 접근을 통해 통신 확인
curl <Worker1 노드의 IP>:30000
5. Worker2 로의 접근을 통해 통신 확인
curl <Worker2 노드의 IP>:30000
6. 리소스 삭제
kubectl delete pod,svc --all
Loadbalancer Service
1. yaml 확인
cat pod.yaml cat svc-loadbalancer.yaml
2. yaml 을 활용한 Loadbalancer 유형의 Service및 pod 생성
kubectl create -f svc-loadbalancer.yaml kubectl create -f pod.yaml
3. 생성한 Service 확인
kubectl get svc
ExternalIP 를 발급받지 못하는 Pending 상태 확인
4. Loadbalancer 타입의 서비스가 생성한 ClusterIP 를 활용하여 내부에서 접근 시도
curl <Loadbalancer 타입의 서비스의 ClusterIP>:9090
5. Loadbalancer 타입의 서비스가 생성한 NodePort 를 활용하여 외부에서 접근 시도
curl <아무 Worker IP>:<Loadbalancer 타입의 서비스의 NodePort>
EmptyDir Volume
1. yaml 확인
cat pod.yaml
2. yaml 을 활용한 emptydir 유형의 Volume을 사용하는 Pod 생성
kubectl create -f pod.yaml
3. 위 2에서 만든 Pod 내부의 컨테이너 redis로 접속합니다.
kubectl exec -it emptydir-pod --container redis -- /bin/bash
4. 마운트 된 디렉토리로 이동 후 파일생성
cd /mount1 echo hello emptydir >> test.txt cat test.txt exit
5. 위 2에서 만든 Pod 내부의 컨테이너 nginx로 접속합니다.
kubectl exec -it emptydir-pod --container nginx -- /bin/bash
6. 디렉토리 이동 후 4에서 생성한 파일 확인
cd /mount2 ls cat test.txt exit
7. 리소스 삭제
kubectl delete pod emptydir-pod
HostPath Volume
1. yaml 확인
cat pod.yaml
2. yaml 을 활용한 hostpath 유형의 Volume을 사용하는 Pod 생성
kubectl create -f pod.yaml
3. 위 2에서 생성한 redis 컨테이너로 접속
kubectl exec -it hostpath-pod --container redis -- /bin/bash
4. 마운트 된 디렉토리로 이동 후 파일생성
cd /mount1 echo hello hostpath >> test.txt cat test.txt exit
5. 위 2에서 생성한 Pod 가 어떤 노드에 생성되었는지 확인
kubectl get pod -o wide
6. 위 5에서 확인한 노드의 터미널로 이동하여 파일 생성 확인
cd /tmp ls cat test.txt
7. 리소스 삭제
kubectl delete pod hostpath-pod
Persistent Volume
1. PV, PVC, Pod yaml 확인
cat pv.yaml pvc.yaml pod.yaml
2. 위 13에서 확인한 yaml로 리소스 생성
kubectl create -f pv.yaml kubectl create -f pvc.yaml kubectl create -f pod.yaml
3. 생성된 리소스 확인
kubectl get pv,pvc,po
4. persistentvolume 안에 있는 컨테이너로 접속
kubectl exec -it pv-pod --container container -- /bin/bash
5. 마운트 된 디렉토리로 이동 후 파일생성
cd /mount1 echo hello pv >> pv.txt cat pv.txt exit
6. persistentvolume라는 pod 가 어떤 노드에 생성되었는지 확인
kubectl get po pv-pod -o wide
7. 위 18에서 확인한 노드의 터미널로 이동하여 파일 생성 확인
cd /tmp ls cat pv.txt
8. 클리어
kubectl delete pod,pv,pvc --all
Appendix_Autoscaling HPA
1. Metic-server 설치
kubectl create -f metric-server.yaml
2. Deployment 편집
kubectl edit deployment metrics-server -n kube-system
/kubelet-use-node-status-port
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls
맨 아랫줄을 추가해줍니다.(- --kubelet-insecure-tls)
3. 동작 확인
kubectl top node
4. 실습에 필요한 Deployment와 Service 생성
kubectl create -f php-apache.yaml
5. HPA 생성
kubectl autoscale deployment php-apache \ --cpu-percent=50 --min=1 --max=10
6. 생성한 HPA 확인
kubectl get hpa
7. php-apache 서비스의 ClusterIP 확인
kubectl get svc
8. 부하 생성(다른 터미널을 추가하여 진행)
kubectl run -i --tty load-generator --rm \
--image=busybox --restart=Never -- \
/bin/sh -c "while sleep 0.01; do \
wget -q -O- http://<위에서확인한 IP>; done"
9. 1분정도 뒤 Pod 증가 확인
kubectl get hpa
kubectl get deployment php-apache
10. 부하 중지(부하 생성 시 터미널에서 진행)
Ctrl + C
11. 약 5~7분 뒤 Pod 감소 확인
kubectl get hpa kubectl
get deployment php-apache
12. clear
kubectl delete pod,hpa,deploy --all
'KT AIVLE School 3기 > AIVLER 활동' 카테고리의 다른 글
[AIVLE_AI]Django활용 Web App 개발 2일차 (0) | 2023.05.11 |
---|---|
[AIVLE_AI]Django활용 Web App 개발 1일차 (0) | 2023.05.10 |
[AIVLE_AI] SQL 2일차 (0) | 2023.05.08 |
[AIVLE_AI] SQL 1일차 (0) | 2023.05.08 |
[AIVLE_AI] WEB/WAS/DB 2일차 (0) | 2023.05.08 |