본문 바로가기
학부연구생/학부연구생 실습

Minikube 활용해서 Pod 생성해 App 배포하기

by ㅇㅏ도 2024. 3. 19.

1. minikube 내부 네트워크 구성 분석

kubectl 도구로 현재 설치된 k8s의 노드 조회

->내부 IP 주소로 192.168.49.2가 지정된 minikube라는 노드가 생성됨

minikube 노드는 실제 물리 노드가 아니라 docker 컨테이너 기반으로 구축된 가상 노드로 k8s를 구성하는 컨테이너들은 조회되지 않음!

minikube 컨테이너로 SSH 접속한 뒤 실행 중인 컨테이너를 조회하면 쿠버네티스 동작에 필요한 모든 기능들인 도커 컨테이너 기반으로 실행 중임을 확인할 수 있음

 

ifconfig 명령어를 통해 정보들을 조회했다. 

(이때 sudo apt update / sudo apt install net-tools 를 통해 업데이트 하고 실행하기)

minikube 컨테이너에 접속한 상태에서 IP 주소를 조회해보면

생성될 pod가 연결될 ‘docker0’라는 브릿지의 IP주소 172.17.0.1이 할당

해당 minikube 컨테이너 노드가 Host와 통신하기 위한 인터페이스 ‘eth0’의 IP주소 192.168.49.2가 할당

Host에서 네트워크 정보를 조회해보면,

minikube 컨테이너 노드와 연결된 브릿지 ‘br-8bbfd373516f’의 IP주소 192.168.49.1이 할당

Host가 외부와 통신하기 위한 인터페이스 ‘ens33’에는 IP주소 192.168.52.119할당

 

2. Pod 생성해 app 배포

Application이 Pod에서 동작하기 위해서는 해당 app에 대한 컨테이너 이미지가 필요

linarena라는 도커 허브 리포지토리에 ‘image:0.1’라는 이름으로 배포해준 컨테이너 이미지 활용

‘linarena/image:0.1’ 컨테이너 이미지를 가지고 ‘mypod’라는 이름의 Pod를 생성하는 ‘my-pod.yml’ 파일 생성

vi my-pod.yml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: myapp
    image: linarena/image:0.1

linarena/image:0.1 이라는 컨테이너 이미지를 가지고 mypod라는 이름의 pod를 생성해 my-pod.yml 파일을 생성한다.

sudo kubectl create -f my-pod.yml	//파일 생성

sudo kubectl get pod	//상태 조회

sudo kubectl describe pod mypod	//상세정보 조회

‘mypod’의 상세정보 조회해보면 minikube라는 컨테이너 노드(’192.168.49.2’)에서 실행 중이고 IP주소는 ‘10.244.0.4’

sudo kubectl exec -it mypod /bin/bash	//pod 접속
-> 안되길래
sudo kubectl exec -it mypod -- bash 로 접속

pod를 접속한 후에

root@mypod:/# apt-get update
root@mypod:/# apt-get install -y net-tools curl jq	//curl과 이때 호출되는 json 포멧의 데이터를 깔끔하게 출력해 주는 도구인jq 설치

root@mypod:/# ifconfig

업데이트하고,

curl과 이때 호출되는 json 포멧의 데이터를 깔끔하게 출력해 주는 도구인jq 설치하고,

mypod의 네트워크 정보를 조회한다. 

‘docker0’(’172.17.0.1’)와 연결되는 인터페이스 ‘ens33’에 IP주소 ‘10.244.0.4’ 할당

curl http://10.244.0.4:80/server_info.php | jq

설치한 cURL 도구로 pod 안 컨테이너(10.244.0.4)로 server_info_php 웹파일을 호출