https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fbinary+download
minikube start
minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you’ll
minikube.sigs.k8s.io
미니 쿠버네티스에서 다운로드 받는다. 급하게 하지말고 천천히 지시한데로 진행하면 된다. 그리고 파워셀로 다운로드 받는다면 스타트하고 다시 켜서 하자 아니면 에러가 발생한다....
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
이명령어를 사용해서 Hyper-V라는 기능을 활성화한다.
이후
kubectl version
라는 명령어를 기입해서
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.31.0
가 표출되면 바로 시작하면 되는 데 없다고 한다면
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.5/bin/windows/amd64/kubectl.exe
명령어를 기입하여 설치를 진행한다.
개발 중간에 쉬는 시간이나 하루의 개발을 마무리하였다면
minikub delete로 꺼주는 걸 추천한다. 그래야 우리 컴퓨터가 리소스를 그만 할수있다.
자 이제 진짜 시작이다.
미니쿠브에서 도커를 실행해야 한다
& minikube docker-env | Invoke-Expression명령어로 미니쿠브에서 도커 환경을 실행시킨다.
실행이 완료되었다면 docker build -t spring-boot-app:latest . 명령어를 진행하여 도커파일을 이용한 빌드를 진행한다.
pod는 쿠버네티스 즉k8s에서 가장 작은 단위이다. 이한 pod는 적어도 1개이상의 컨테이너를 가져야한다.
pod는 선언적으로 생성하는데 yaml파일을 이용해서 세팅을 해야한다.
아래 는 예시 yaml파일이다.
※yml 과 yaml은 차이가 없으니 신경쓰지 않아도 된다.
위에 yaml을 뜯고 씹고 맛보고 즐겨보면
apiVersion은 그야말로 그냥 버젼이다.
kind는 어떤것을 쿠버네티스로 만들고 싶은지를 기입하면 된다 사실상 pod는 고정값이다
metadata:
name:은 unique이다. 따라서 겹치면 안된다. pod의 이름이다.
위 3항목은 어떤 쿠버네티스의 yaml에서 필수값이다.
spec의 containers는 pod 하나당 컨테이너 하나가 기본이다. 그러나 특별한 일이 있다면 여러가지가 들어갈수있다.
그리고 나머지 내용은 docker-compose와 동일하다.
이후
powershell을 yml을 만든 프로젝트 폴더로 간후
kubectl apply -f pods/spring-boot-pods.yaml 이와 같은 명령어를 실행한다. 여기서 sprig-boot-pods.yaml은 파일명이다,
그러면 created되었다는 대답이 돌아온다 !!!
이후
kubectl get pod 라는 명령어를 실행하면 pod가 생성한것을 볼수있다 .그러나 지금은 ready가 0/1 이라는 게 보이는데 실행이 될준비가 안되었다는 것이다. 이후 계속 실행해보면 status가 ImagePullBackOff이렇게 되어있는 것을 볼수있다. 수정해야할듯....
이러한 에러가 발생하면
kubectl describe pod spring-boot-pod로 확인을 해볼수있다. spring-boot-pod이놈은 pods의 이름이다,
Name: spring-boot-pod
Namespace: default
Priority: 0
Service Account: default
Node: minikube/172.26.158.74
Start Time: Wed, 11 Dec 2024 11:21:14 +0900
Labels: <none>
Annotations: <none>
Status: Pending
IP: 10.244.0.3
IPs:
IP: 10.244.0.3
Containers:
spring-boot-container:
Container ID:
Image: spring-boot-app:latest
Image ID:
Port: 8080/TCP
Host Port: 0/TCP
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mkc2n (ro)
Conditions:
Type Status
PodReadyToStartContainers True
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
kube-api-access-mkc2n:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m3s default-scheduler Successfully assigned default/spring-boot-pod to minikube
Normal Pulling 2m30s (x4 over 4m3s) kubelet Pulling image "spring-boot-app:latest"
Warning Failed 2m27s (x4 over 4m) kubelet Failed to pull image "spring-boot-app:latest": Error response from daemon: pull access denied for spring-boot-app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Warning Failed 2m27s (x4 over 4m) kubelet Error: ErrImagePull
Warning Failed 2m1s (x6 over 4m) kubelet Error: ImagePullBackOff
Normal BackOff 107s (x7 over 4m) kubelet Back-off pulling image "spring-boot-app:latest"
위와 같이 발생한것을 확인할수있다. 스케줄러가 정상적 동작했으나 잘모르겠다... 그냥 삭제후 재실행 해보자
kubectl delete pod spring-boot-pod 로 삭제한다. 다시 위와 같은 것을 했는데도 같은 에러이다.....ㅠㅠ
그래서 강사님의 킥은 imagePullPolicy: Never이것을 추가해서 local것만을 사용하겠다는 의미라고 한다.
yaml을 위와 같이 수정하니 정상작동한다.
NAME READY STATUS RESTARTS AGE
spring-boot-pod 1/1 Running 0 3s
이와 같이 정상작동하는 것을 볼 수 있다.
kubectl port-forward pod/spring-boot-pod 8080:8080
이렇게 포트로 전환을 시켜달라는 포트 포워딩을 실행해야 한다. 이렇게 해야 요청이 가능하다.
http://localhost:8080/hello 이렇게 주소창에 입력하면 정상작동하고 있는 것을 확인해 볼수있다.
단, 백그라운드로 미니쿠버네티스는 사용이 불가하기에 다른실습이 불가 하다.
이렇게 spec 안에 추가할수있다.
livenessprobe의 /merong은 사실상 healthcheck로 사용할수있다 이는 컨테이너를 새로이 만들어 버린다
readinessprobe은 오류가 발생하면 제외를 시켜버리고 요청을 다른 곳으로 보내버린다.
자, 이제 deplyment를 한번 만들어 봅시다 .
사실상 pod와 비슷해 보이지만 label을 통해서 pod들을 묶을 수있고 이를 또 deployment가 묶어서 관리를 진행할수있다. 호우!!!
따라서 pod의 구성도 어떻게 될지를 알 수 있어야 한다 .
이렇게 kubectl apply -f .\deployments\spring-boot-deployment.yaml 명령어를 실행하면 3개가 계속 유지된다. 다시말해서
지워도 3개가 다시 유지하게 새로 생성된다.
'PlayData 백엔드 부트캠프 정리' 카테고리의 다른 글
| 1차 캐시와 2차 캐시의 차이와 스프링부트에서 이용 (0) | 2025.01.08 |
|---|---|
| 쿠버네티스 활용 (서비스) (0) | 2024.12.12 |
| 다시 시작하는 부트 캠프 하루 후기 10일차 (1) | 2024.11.07 |
| 다시 시작하는 부트 캠프 하루 후기 9일차 (0) | 2024.11.06 |
| 다시 시작하는 부트 캠프 하루 후기 7일차 (0) | 2024.11.05 |