Now Loading ...
-
쿠버네티스
쿠버네티스란,
다수의 컨테이너를 효율적으로 배포, 확장 및 관리 하기 위한 오픈소스 시스템
Docker Compose의 확장판이라고 생각
쿠버네티스 장점
컨테이너 관리 자동화(배포, 확장, 업데이트)
부하 분산 (로드 밸런싱)
쉬운 스케일링
셀프 힐링
파드(Pod) 란?,
하나의 프로그램을 실행시키는 단위
쿠버네티스에서 가장 작은 단위
일반적으로 하나의 파드가 하나의 컨테이너를 가진다. (예외로 여러 컨테이너를 가지는 경우도 있다.)
Nginx 파드 예시
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80 # 컨테이너가 사용하는 포트
파드 조회 명령어 kubectl get pods
매니페스트 파일(Manifest File) 이라고 부른다.
kubectl apply -f nginx-pod.yaml 명령어로 파드를 생성할 수 있다.
파드(Pod)로 띄운 프로그램에 접속이 안 되는 이유
도커에 대해서 공부했을 때는 컨테이너 내부와 컨테이너 외부의 네트워크가 서로 독립적으로 분리
쿠버네티스에서는 파드(Pod) 내부의 네트워크를 컨테이너가 공유해서 같이 사용
파드(Pod) 네트워크는 로컬 컴퓨터의 네트워크와 독립적 분리 -> 외부에서 접근 불가
2가지 접근 방법
파드 내부로 들어가서 접근
kubectl exec -it nginx-pod -- bash
파드 의 내부네트워크를 외부에서도 접속할 수 있도록 포트 포워딩 활용
sudo kubectl port-forward pod/nginx-pod 80:80
파드 삭제
kubectl delete pod nginx-pod
백앤드 서버 파드로 띄우기
Spring boot 서버에 Dockerfile 작성
FROM openjdk:17-jdk
COPY build/libs/*SNAPSHOT.jar app.jar
LABEL authors="jeon-eunseong"
ENTRYPOINT ["java","-jar","/app.jar"]
쿠버네티스 파드 매니페스트 파일 작성
apiVersion: v1
kind: Pod
metadata:
name: spring-pod
labels:
app: spring-app
spec:
containers:
- name: spring-container
image: spring-server
ports:
- containerPort: 8080
등록 명령어
kubectl apply -f spring-pod.yaml
조회 명령어
kubectl get pods
ImagePullBackOff 오류 발생
이미지가 없다고 에러가 뜨는 이유
이미지 풀 정책(Image pull Policy) 때문에 발생
이미지 풀 정책
yaml 을 읽어서 Pod 생성 시, 이미지를 어떻게 Pull 할 지에 대한 정책
Always: 로컬 말고, 무조건 레지스트리(Dockerhub, ECR(원격 이미지 저장소)) 에서 가져온다.
IfNotPresent: 로컬에 이미지 먼저 가져오고, 없으면 레지스트리에서 가져온다.
Never: 로컬에서만 이미지를 가져온다.
image 뒤에 version을 명시하지 않거나, latest 태그를 사용하는 경우 Always 가 기본값
lastest 태그를 사용하지 않는다면 IfNotPresent 가 기본값
해결 방법
이미지 풀 정책을 IfNotPresent 로 변경
...
ports:
- containerPort: 8080
imagePullPolicy: IfNotPresent
Touch background to close