본문 바로가기

Infrastructure/Kubernetes

[CKA] Minikube

Minikube

  • 이번 장에서는 Certified Kubernetes Administrator (CKA) 을 준비하며 기본 쿠버네티스 클러스터를 설치하는 방법을 알아보도록 한다.

Kubectl 설치

  • 자신의 OS에 맞는 탭을 선택하고 커맨드를 복사한다.

  • 설치가 완료되면 chmod +x ./kubectl 명령을 입력하여 실행가능한 상태로 변환한다.

  • 변경이 완료되었으면 바이너리 파일을 시스템 경로로 이동시킨다.
    • sudo mv ./kubectl /usr/local/bin/kubectl
    • sudo chown root: /usr/local/bin/kubectl
    • 이렇게 설정하는 경우 시스템 어디에서든 실행시킬 수 있는 상태가 된다.

  • kubectl version 명령을 입력하여 정상적으로 설치되었는지 확인해 본다.


Minikube 설치

  • 이번 장에서는 macOS에서 Docker 환경에 Minikube를 설치하는 방법을 알아보도록 한다.
  • 호환성 이슈로 실행시킬 때는 docker가 아닌 hyperkit을 사용한다. (docker를 설치하면 hyperkit 사용이 가능)
  • brew install cask 명령어를 입력한다.

  • brew install --cask virtualbox 명령어를 입력하여 "docker"를 설치하고 docker --version 명령어를 입력하여 정상적으로 설치되었는지 확인한다.

  • 설치된 "docker" 애플리케이션을 백그라운드에서 실행되는 상태로 만들어둔다.

  • brew install minikube 명령을 입력하여 "Minikube"를 설치한다.

  • minikube start 명령어를 입력하여 "Minikube"를 실행시킨다. 최초 실행시 필요한 의존성 다운로드로 인해 많은 시간이 소요된다.

  • 정상적으로 실행된 경우 "Docker Desktop" 앱에서 "Minikube" 컨테이너가 실행된 것을 확인할 수 있다.

  • minikube status 명령어를 입력하여 "Minikube"의 상태를 확인한다.


설치 테스트

  • kubectl get nodes 명령어를 입력하여 "Minikube"에 설치된 노드를 확인한다.

  • 이번에는 클러스터를 이용해 간단한 웹 사이트를 배포해본다.
  • kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver-arm:1.8 명령어를 입력하여 "hello-minikube"라는 이름의 디플로이먼트를 생성한다.

  • 이번에는 생성된 디플로이먼트를 서비스로 노출시킨다.
  • kubectl expose deployment hello-minikube --type=NodePort --port=8080 명령어를 입력한다.

  • 생성된 "hello-minikube"의 url을 확인하기 위해 minikube service hello-minikube 명령어를 입력한다.

  • 정상적으로 실행이되었다면 새로운 브라우저가 실행되면서 정상적으로 접속이 가능하다.


Nginx Pods 실행

  • kubectl run nginx --image=nginx 명령어를 입력하여 Nginx Pods를 실행시킨다.
  • 정상적으로 실행되었다는 메시지가 확인되면 kubectl get pods 명령어를 입력하여 실행된 Pods를 확인한다.

  • kubectl describe pods를 입력하여 Pods의 상세 정보를 확인할 수 있다.
Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             minikube/192.168.49.2
Start Time:       Wed, 19 Feb 2025 14:46:33 +0900
Labels:           run=nginx
Annotations:      <none>
Status:           Running
IP:               10.244.0.3
IPs:
  IP:  10.244.0.3
Containers:
  nginx:
    Container ID:   docker://53daa776e6792e2f4d64f69966a1cf660d289301d43c37b7ef711a42a2f58200
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:91734281c0ebfc6f1aea979cffeed5079cfe786228a71cc6f1f46a228cde6e34
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 19 Feb 2025 14:46:44 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wfnbr (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True
  Initialized                 True
  Ready                       True
  ContainersReady             True
  PodScheduled                True
Volumes:
  kube-api-access-wfnbr:
    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  109s  default-scheduler  Successfully assigned default/nginx to minikube
  Normal  Pulling    109s  kubelet            Pulling image "nginx"
  Normal  Pulled     98s   kubelet            Successfully pulled image "nginx" in 10.696s (10.696s including waiting). Image size: 197280883 bytes.
  Normal  Created    98s   kubelet            Created container: nginx
  Normal  Started    98s   kubelet            Started container nginx
  • Pod의 이름: nginx
  • Pod의 네임스페이스: default
  • Pod의 현재 상태: Running (실행 중)
  • Pod의 준비 상태: True (컨테이너가 요청을 받을 준비가 되어 있음)
  • Pods의 IP: 10.244.0.3
  • Pods의 Node: minikube
  • Pods의 컨테이너 이름: nginx
  • Pods의 컨테이너 이미지: nginx
  • Pods의 컨테이너 상태: Running
  • 재시작 횟수: 0
  • kubectl get pods -o wide 명령어를 입력하여 Pods의 상세 정보를 확인할 수 있다.
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          5m19s   10.244.0.3   minikube   <none>           <none>

참고한 강의

'Infrastructure > Kubernetes' 카테고리의 다른 글

[CKA] ReplicaSet  (0) 2025.02.19
[CKA] YAML  (0) 2025.02.19
[CKA] Pods  (0) 2025.02.19
[CKA] Docker & containerD  (0) 2024.11.14
[CKA] Kubernetes Architecture  (0) 2024.11.14