https://kubernetes.io/ko/docs/tutorials/hello-minikube/
Hello Minikube
이 튜토리얼에서는 Minikube와 Katacoda를 이용하여 쿠버네티스에서 샘플 애플리케이션을 어떻게 실행하는지 살펴본다. Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다. 참고:로컬에서 M
kubernetes.io
관리형 k8s나 IaaS 클러스터에서 테스트하기 부담스러웠다.
그래서 로컬 환경에서 쉽게 클러스터를 구성할 수 있는 Minikube나 k3s 같은 로컬 쿠버네티스 도구를 알아봤다.
WSL2 리소스 설정
Windows의 경우, .wslconfig 파일을 통해 도커에 할당할 리소스를 지정할 수 있다.
검색 : %UserProfile%
[wsl2]
processors=8
memory=6GB
wsl -shutdown 이후 재실행
Minikube 설치(windows)
https://minikube.sigs.k8s.io/docs/start/
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
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing
$env:Path += ";C:\minikube"
[Environment]::SetEnvironmentVariable("Path", $env:Path, [EnvironmentVariableTarget]::Machine)
> minikube version
> minikube start –cpus=4 –memory 5943 –disk-size 32g
각각 클러스터에 할당할 CPU 수, 메모리 용량, 디스크 용량을 뜻한다.
kubectl이 동봉된 패키지로, kubectl get pod -n kube-system 등의 명령어를 사용 가능
포트포워딩
> kubectl port-forward deployment/frontend 8080
종료와 삭제
minikube stop
minikube delete
로컬 Minikube 환경 연결
~/.kube/config 파일을 기준으로 클러스터에 연결된다.
ls ~/.kube/config
kubectl config use-context minikube
KuberConfig 파일을 로컬로 가져오기
AWS CLI와 kubeconfig를 통해 EKS 클러스터의 인증 정보를 가져오면, Kubernetes Java Client는 ~/.kube/config 파일을 사용하여 클러스터에 연결할 수 있다.
Config.defaultClient()는 ~/.kube/config 파일을 사용하여 클러스터에 연결
KuberConfig는 클러스터에 접속하기 위한 설정 파일로 인증 및 연결 정보를 포함한다.
- aws configure로 입력하거나 aws configure list로 확인하기
- aws eks --region ap-northeast-2 update-kubeconfig --name <cluster-name>
//Kubernetes Java Client
implementation 'io.kubernetes:client-java:18.0.0'
//Docker Java Client
implementation 'com.github.docker-java:docker-java:3.3.0'
implementation 'com.github.docker-java:docker-java-transport-okhttp:3.3.0'
implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1'
// JGit
implementation group: 'org.eclipse.jgit', name: 'org.eclipse.jgit', version: '4.4.1.201607150455-r'
implementation 'software.amazon.awssdk:ecr:2.20.5'
Git 주소를 입력하면 해당 레포를 빌드하고, minkube 상에서 실행하도록 할거다.
알고리즘이나 과제 전형, 워게임 문제 풀고 관리하기 위한 컨테이너풀로 서비스를 제공하는 프로젝트를 기획중이다.
이제 다시 원하는 이미지를 Pod로 실행하는 로직을 실행해보자.
바로 ECR registry에 있는 nginx를 입력해서 진행해봤는데 잘 된다.
Error creating Pod: Content type "text/html;charset=UTF-8" is not supported for type: class io.kubernetes.client.openapi.models.V1Pod 오류
POST: /api/k8s/create-pod 엔드포인트로 접속해서 nginx ECR를 생성해봤다.
- public.ecr.aws/nginx/nginx:stable-perl
PS C:\Users\jks83> kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:61361
CoreDNS is running at https://127.0.0.1:61361/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
PS C:\Users\jks83> kubectl get --raw /api
{"kind":"APIVersions","versions":["v1"],"serverAddressByClientCIDRs":[{"clientCIDR":"0.0.0.0/0","serverAddress":"..:8443"}]}
Error creating Pod in Service: {"timestamp":"2024-12-12T12:10:18.054+00:00","status":404,"error":"Not Found","path":"/api/v1/namespaces/default/pods"} 오류
좀 더 정확한 내용을 디버깅하기 위해 로그를 추가해봤다.
Error creating Pod in Service: {"timestamp":"2024-12-12T13:00:13.390+00:00","status":404,"error":"Not Found","path":"/api/v1/namespaces/default/pods"}
HTTP Status Code: 404
Response Headers: {cache-control=[no-cache, no-store, max-age=0, must-revalidate], connection=[keep-alive], content-type=[application/json], date=[Thu, 12 Dec 2024 13:00:13 GMT], expires=[0], keep-alive=[timeout=60], pragma=[no-cache], transfer-encoding=[chunked], vary=[Origin, Access-Control-Request-Method, Access-Control-Request-Headers], x-content-type-options=[nosniff], x-frame-options=[DENY], x-xss-protection=[0]}
아하…
평소처럼 애플리케이션을 도커 이미지로 만들어서 실행하는데, 생각해보니 KuberConfig는 로컬에 둬놓고 도커 이미지 안에 없는걸 탓하고 있었다..
도커 이미지로 만들지 않고 애플리케이션을 로컬에서 가동하니 정상적으로 kubeConfig를 읽어온다.
'kubernetes' 카테고리의 다른 글
Service Mesh - Kubernetes가 있는데 왜 Istio가 필요한가요? (0) | 2025.03.12 |
---|---|
Kubernetes의 버전 업데이트, 어떻게 할까? (1) | 2024.12.17 |
구글 현직자분께 물어본 Kubernetes와 보그(Vogue) 비교 (0) | 2024.11.19 |
ArgoCD를 이용한 무중단 배포하기(Canary 방식, argo-rollout) (0) | 2024.11.19 |
Spring Boot Actuator를 이용한 Kubernetes Pod의 Health check (0) | 2024.11.19 |