728x90
<Kubernetes 실습 :: 포드(pod) 관리 - declarative syntax 포드 선언형>
<Pod 관련 명령어 정리>
kubectl {create | apply} -f {mynode.yaml | URL/mynode.yaml}
kubectl apply -f resources/ (YAML (directory) kubectl get pod [ -o {wide | yaml | json} ]
kubectl describe pod pod-name kubectl delete pod -f mynode.yaml
kubectl delete pod -f mynode.yaml -f mynode-svc.yaml kubectl delete {pod pod-name | pod/pod-name} kubectl edit pod pod-name
kubectl replace -f mynode.yaml kubectl patch -f mynode.yaml
<포드 생성 방법>
- imperative syntax (명령형 문법): kubectl {create | run} 을 통해 CLI로 Object 생성
- declarative syntax (선언형 문법): YAML코드를 작성하여 kubectl apply 하여 생성
<declarative syntax 포드 선언형 실습 1>
1. multi-pod1.yaml 제작
- 두 개의 컨테이너가 단일 Pod 내에서 실행
<multi-pod1.yaml 파일 내용>
- 두 개의 컨테이너를 가지고 있는 Pod (8080, 8000 포트 개방)
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: c1
image: mrsono0/k8s-lab:p8000
ports:
- containerPort: 8000
- name: c2
image: mrsono0/k8s-lab:p8000
ports:
- containerPort: 8080
2. yaml 파일 적용
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f multi.pod1.yaml
pod/multi-container-pod created
3. multi-container-pod 제작 확인
A. kubectl get po -o wide 명령어로 제작 확인
B. ssh으로 마스터 서버 접속 후 로컬 호스트 요청
- ssh 접속: ssh ubuntu@192.168.56.100
ubuntu@k8s-master: kubectl exec -it multi-container-pod -c c1 -- curl localhost:8000
contaienrPort: 8080
ubuntu@k8s-master: kubectl exec -it multi-container-pod -c c2 -- curl localhost:8080
contaienrPort: 8000
<명령어 실행 시 과정 조사 명령어>
- strace: 리눅스에서 실행되는 프로세스의 시스템 호출을 추적하고 분석하는 유틸리티로, 명령어가 어디까지 실행됐는지 알 수 있는 서비스
- 디버깅 할 시에 유용함
ubuntu@k8s-master:~$ sudo apt -y install strace
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
strace is already the newest version (5.16-0ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 71 not upgraded.
- kubectl get pod을 실행하는 동안 발생하는 시스템 호출 추적
ubuntu@k8s-master:~$ strace kubectl get pod
<출력 화면>
<declarative syntax 포드 선언형 실습 2>
- myweb이라는 폴더를 만들어 파드 선언 및 서비스 선언 실습 실시
1. 파드 생성
<myweb1-pod.yaml>
- nginx-container라는 이름의 컨테이너가 포함되어 있는 pod로, 포트 8000을 개방
apiVersion: v1
kind: Pod
metadata:
name: myweb1
labels:
app: myweb1
spec:
containers:
- name: nginx-container
image: nginx:1.25.3-alpine
ports:
- containerPort: 8000
>> 제작한 yaml 파일 실행
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f myweb1-pod.yaml
pod/myweb1 created
2. 서비스 선언
<myweb1-svc.yaml>
- myweb1 라벨을 가진 Pod를 선택해 포트 8001을 통해 외부에서 서비스에 접근
- 해당 트래픽은 선택된 Pod의 포트 80으로 전달
- 또한 외부 IP 주소 192.168.56.101을 통해 서비스에 접근
apiVersion: v1
kind: Service
metadata:
name: myweb-svc
spec:
selector:
app: myweb1
ports:
- port: 8001
targetPort: 80
externalIPs:
- 192.168.56.103 (생성된 노드에 따라 IP 다르게 부여)
** externalIPs 확인 방법: pod를 확인해 생성된 노드 확인 (k8s-node3 = 192.168.56.103)
3. 서비스 적용
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f myweb1-svc.yaml
pod/myweb-svc created
<생성 확인>
A. kubectl get po,svc -o wide | grep myweb1: 실행 중인 포드와 서비스 출력
B. curl 실행
- 서비스를 통해 노출된 포트에 curl을 실행하면 해당 서비스의 백엔드 Pod로 전달되어 정상적인 응답을 받아야 함
'클라우드 + DevOps > Kubernetes (k8s)' 카테고리의 다른 글
Kubernetes 실습 :: 포드(pod) 관리 - imperative syntax 포드 명령형 (0) | 2024.04.19 |
---|---|
Kubernetes 쿠버네티스 :: 동적 Volume, StorageClass (1) | 2024.04.19 |
Kubernetes 쿠버네티스 :: PV, PVC 이해와 활용 (1) | 2024.04.18 |
Kubernestes 쿠버네티스 포드 관련 이론 및 유형 정리 (0) | 2024.04.17 |
Kubernetes 쿠버네티스 실습 :: MySQL 서버 구축 (0) | 2024.04.17 |