저번 포스팅 마지막에 Spring boot 프로젝트를 이미지로 빌드 후 파드로 띄웠는데,
마지막에 ImagePullBackOff 에러가 발생하는 것을 볼 수 있었다.
이번 포스팅은 이미지가 없다고 에러가 뜨는 이유에 대해서 작성하려고 한다.
- 이미지가 없다고 에러가 뜨는 이유.
- 이미지 풀 정책
- 쿠버네티스가 yaml 파일을 읽어들여 podf를 생성할 때,
이미지를 어떻게 Pull을 받아올 건지에 대한 정책을 의미한다.- Always : 로컬에서 이미지를 가져오지 않고, 무조건 레지스토리(=Dockerhub, ECR 과 같은 원격 이미지 지정소) 에서 가져온다.
- IfNotPresent : 로컬에서 이미지를 먼저 가져온다. 로컬에 이미지가 없는 경우에만 레지스트리에서 가져온다.
- Never : 로컬에서만 이미지를 가져온다.
- 매니페스트 파일에 이미지 풀 정책 설정 방법
- spec/containers 하위에 `imagePulPolicy : Always` 를 입력한다.
- 매니페스트 파일에 이미지 풀 정책을 설정하지 않은 경우
- 이미지 태그가 ` latest` 이거나 명시되지 않은 경우 : Always
- 이미지 태그가 `latest` 가 아닌 경우 : IfNotPreset
# pod 로 생성한다 apiVersion: v1 kind: Pod # pod 에 대한 기본 정보 생성 metadata : name : spring-pod # spec에 대한 세부 정보 지정. spec : containers : - name : spring-container # spring-server image를 활용하여 image 를 띄울 것 image : spring-server ports: - containerPort: 8080
- 위와 같이 설정된 경우에는, image 뒤에 tag 가 적혀있지 않아 Always로 설정되어 있음.
- 즉, 내가 만들었던 이미지는 local image 인데, 레지스트에서만 파일을 가져오므로,
`ImagePullBackOff` 에러가 발생했던 것. - sprin-server 을 dockerhub 에 올리거나, imagePulPolicy 를 IfNotPresent혹은 Never 로 설정하면 에러가 발생하지 않는다.
- 쿠버네티스가 yaml 파일을 읽어들여 podf를 생성할 때,
- 이미지 풀 정책
- 에러 없이 이미지 가져오기
- 이미지 풀 정책 변경하기.
- spring-pod.yaml 파일 아래와 같이 수정하기
# pod 로 생성한다 apiVersion: v1 kind: Pod # pod 에 대한 기본 정보 생성 metadata : name : spring-pod # spec에 대한 세부 정보 지정. spec : containers : - name : spring-container # spring-server image를 활용하여 image 를 띄울 것 image : spring-server ports: - containerPort: 8080 imagePullPolicy : IfNotPresent
- 기존의 pod 삭제 후 새로 생성하기
- pod 삭제하기
- pod 생성하기
- pod 삭제하기
- spring-pod.yaml 파일 아래와 같이 수정하기
- Pod 프로그램에 접속하기
- pod 내부에서 직접 요청 보내기
- 포트 포워딩 사용하기
- localhost:8080 으로 접속하면 아무것도 나오지 않음
localhost:12345로 접속해야 함.(pod 내부의 spring boot 프로젝트가 응답함)
- localhost:8080 으로 접속하면 아무것도 나오지 않음
- pod 내부에서 직접 요청 보내기
- 이미지 풀 정책 변경하기.