728x90
<Kubernetes :: Application Pod 배포 실습>
- 일반적인 애플리케이션 Pod 배포 과정 (예시)
- 개발 팀에 Application 배포 요구 전달 > Node JS 테스트를 위한 source code 전달
- 요구 사항을 반영하여 Dockerfile 생성 > docker build를 통해 image 생성
- docker run~ 명령어를 통해 컨테이너화 확인
- Public or Private에 image update
- 해당 image를 이용한 Pod 및 Service를 생성하여 내부와 외부 연결 테스트 수행
- 성공적으로 테스트가 끝났다면 자동 배포 환경(CI/CD)이 포함된 Products 환경에 배포
- k8s-pods 폴더를 생성해 VsCode에서 실습 진행
1. runapp.js 파일 생성
<파일 내용>
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("Welcome to Kubernetes~! by mrsono0." + "\\n");
}).listen(8000);
2. 전달 받은 이미지 정상 가동 확인
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker pull node:21-slim
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker run -it -d --name=runapp-nodejs -p 8000:8000 node:21-slim
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker cp runapp.js runapp-nodejs:/runapp.js
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker exec -it runapp-nodejs node -v
3. Dockerfile 제작
<파일 내용>
FROM node:21-slim
EXPOSE 8000
COPY runapp.js .
CMD node runapp.js
4. 이미지 빌드
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker build -t choiseen/mynode:1.0 .
5. 컨테이너 구축 및 docker container ps로 확인
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker run -it -d --name=runapp-nodejs -p 8000:8000 choiseen/mynode:1.0
748622e35098dda9108328f0e4b1521f65931e6a0dedba4cad2c3ba1684fe824
PS C:\\Users\\admin\\Desktop\\k8s-pods> docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
748622e35098 choiseen/mynode:1.0 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:8000->8000/tcp runapp-nodejs
- Docker Desktop에서도 생성 확인 가능
- Kubernetes로 배포 작업 진행
6. mynode.yaml 파일 생성
<파일 내용>
apiVersion: v1
kind: Pod
metadata:
name: mynode-pod
labels:
app: hi-nodejs
spec:
containers:
- name: nodejs-container
image: choiseen/mynode:1.0
ports:
- containerPort: 8000
7. Kubernetes에 리소스 배포 및 확인
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f mynode.yaml
pod/mynode-pod created
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl get po -o wide
- 생성은 확인되었으나 쿠버네티스 클러스터에서 제작한 것이기 때문에 curl 했을 때 불가
8. 서비스 정의
- mynode-svc.yaml 파일 생성
<파일 내용>
apiVersion: v1
kind: Service
metadata:
name: mynode-svc
spec:
selector:
app: hi-nodejs
ports:
- port: 10001
targetPort: 8000
externalIPs: (개인마다 다름)
- 192.168.56.101
- externalIPs 입력 방법
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl get po -o wide | grep mynode
>> 해당 명령어로 mynode-pod가 어느 노드에 생성됐는지 확인
- 생성된 노드에 맞는 IP로 적어야 함
- ex. k8s-node2에서 생성되면 192.168.56.102
- 이름이 "mynode-svc"
- 클러스터 내부 및 외부에서 10001 포트로 노출
- 들어오는 트래픽은 8000 포트로 전달
- 외부 IP로 192.168.56.101 사용
9. mynode-svc.yaml 파일 서비스 배포
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl apply -f mynode-svc.yaml
service/mynode-svc created
PS C:\\Users\\admin\\Desktop\\k8s-pods> kubectl get po,sc -o wide | grep mynode
>> curl 192.168.56.101:10001 가능
'클라우드 + DevOps > Kubernetes (k8s)' 카테고리의 다른 글
Kubernetes 쿠버네티스 실습 :: NFS 서버 구축 (0) | 2024.04.16 |
---|---|
Kubernetes 실습 :: Helm 서비스 이용 (0) | 2024.04.16 |
쿠버네티스 아키텍처 - 오브젝트 이론 (0) | 2024.04.15 |
Kubernetes 실습 :: Kubernetes 대시보드 모니터링 실습 (2) 프로메테우스 모니터링 서비스 설치 (0) | 2024.04.14 |
Kubernetes 실습 :: Kubernetes 대시보드 모니터링 실습 (1) (0) | 2024.04.13 |