Kimuksung
Kimuksung 주니어 Data Enginner입니다.

MAC에서 Kubernetes 개발 환경 만들기

MAC에서 Kubernetes 개발 환경 만들기

일반적으로 많은 강의에서도 볼수 있듯이 K8S를 사용하기 위해서는 Virtual Box를 사용하여 구축한다.

MAC은 VirtualBox와 호환이 잘 되지 않고 지원도 하지 않기 때문에 다른 방안을 찾고 있었다.

  • minikube
  • kind

잘 공유되어있는 블로그를 발견하여 minikube로 진행해볼 예정이다.


K8S 설치하기

  • 1.25.2 버전으로 설치되는데, m1 유저는 1.25.1 아래로 받아야 한다.
1
2
3
4
$ brew install minikube
# 만약 문제가 발생한다면
$ minikube delete
$ minikube start --kubernetes-version=v1.23.1
1
2
3
$ curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.25.1/minikube-darwin-arm64 \
  && chmod +x minikube
$ sudo install minikube /usr/local/bin/minikube
1
$ minikube version

minikube에서는 가상 드라이버를 설정해야한다.
M1에서는 Docker만 지원한다.

  • Hyperkit
  • Hyper-V
  • Docker
  • VirtualBox
1
$ minikube start --driver=docker

kubectl 설치

1
$ brew install kubectl
Docker에 띄우기

  • docker에서 local 환경에 아래와 같은 서비스를 실행
1
$ docker-compose up -d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker-compose.yml
version: "3"

services:
  wordpress:
    image: wordpress:5.9.1-php8.1-apache
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
    ports:
      - "30000:80"

  mysql:
    image: mariadb:10.7
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_ROOT_PASSWORD: password
kubernetes 배포

  • 아직 정확하게 돌아가는 동작 원리 및 구조는 파악하지 못하였다.
  • 일단은 러프하게 다른 사람이 배포한 것을 보고 쫓아가면 어느정도 이해한 뒤 다시 접근할 예정
1
2
3
4
5
# create cluster
$ kubectl apply -f wordpress-k8s.yml

# check cluster component
$ kubectl get all 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# wordpress-k8s
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
        - image: mariadb:10.7
          name: mysql
          env:
            - name: MYSQL_DATABASE
              value: wordpress
            - name: MYSQL_ROOT_PASSWORD
              value: password
          ports:
            - containerPort: 3306
              name: mysql

---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
        - image: wordpress:5.9.1-php8.1-apache
          name: wordpress
          env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql
            - name: WORDPRESS_DB_NAME
              value: wordpress
            - name: WORDPRESS_DB_USER
              value: root
            - name: WORDPRESS_DB_PASSWORD
              value: password
          ports:
            - containerPort: 80
              name: wordpress

---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  type: NodePort
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
k8s port-forwarding

  • Mac에서는 각 서비스 마다 포트를 별도로 열어주어야 접속이 가능하다고 한다.
  • 그렇지 않으면 포트가 열려있다고 하더라도 아래와 같이 연결이 되지 않는다.

1
2
$ kubectl port-forward service/{서비스명} {로컬 포트}:{서비스 포트}
$ kubectl port-forward service/wordpress 4000:80

K8S 서비스 및 아이피 확인하기


  • ip - 외부와 연결된 ip 값
    • MAC이 아니였다면 해당 ip와 포트로 연결되어 보여진다고 함

  • Service - Returns a URL to connect to a service
1
2
$ minikube service {서비스명}
$ minikube ip


참조