본문

IT 소식
MacBook M1에서 애플리케이션 테스트시 Kubernetes 활용하기

작성일 2021년 03월 08일

I. 작성배경

1. MacBook M1 에서 가상머신(VM) 에 대한 어려움 존재

  • VirtualBox 설치시 32bit 만 가능
  • 기타 VM 환경 운용이 어려움

2. Docker Desktop Preview 설치에도 어려움 존재

  • 미완성 버전으로 다수의 버그 존재
  • ex) 계속 Docker Starting 상태 등..

3. Disk Storage 절약 필요

  • 다수의 Docker Images 보유시 노트북 디스크 압박 존재
  • 공유 디스크 환경을 통해 Disk 사용률 절약 및 재사용성 확보

4. Docker vs Kubernetes

  • Docker 기동 + -v 옵션을 통해 공유 스토리지 환경 구성도 가능하나 관리가 귀찮음
  • 현재 가장 핫한 컨테이너 환경 기술인 Kubernetes 로 관리체계를 만들고자 함
  • 개인적 의견으로 현시점(2021/02/19) 기준 MackBook M1 (Apple Silicon) 에서 가상환경으로 가장 최상의 조합은 Docker Desktop Preview + Kubernetes 환경이라고 생각함

II. 준비물

1. Device

  • MacBook M1 Chip (Apple Silicon) (다른 M1 이 아니어도 문제는 없어요. 도커 이미지만 바꾸면 돼요)
  • Internet

2. Software & Scripts

1) Docker Desktop Preview (아직 정식버전 아님, 2021/02/19 기준)
2) yaml 및 스크립트
  • Text는 본문내용 참고
  • 다운로드 : curl -L https://github.com/gereon-park/gereon-park.github.io/blob/main/files/tomcat8onkube.tar.gz?raw=true -o tomcat8on_kube.tar.gz

3. 배경지식

1) 솔루션 엔지니어로 현재 알고 있는 지식
2) Kubernetes Object 개념
  • Volume : pv / pvc / hostpath
  • Deploy & Pod Control
  • Kubernetes Object 와 약어 (단축어)

III. MacBook M1 > Kubernetes + Tomcat8 기동

1. 환경 설정 - Docker Desktop (Preview)

1) Resource 탭 설정
image
  • 사용할 환경에 맞게 리소스 사이즈 조정
  • MacBook Pro M1 기준 CPU 8 Core, RAM 8 G or 16 G (전 16 G)
  • Disk 는 Docker Images 등이 들어갈 공간이라 그렇게 크게 잡지 않아도 됩니다.
  • 실제 사용할 디스크는 MacBook Local 의 아래 디스크 공유를 통해 활용
  • 좌측 하단 도커가 붉은색 계열이면 안돼요

2. 환경 설정 - Kubernetes

1) kubectl 설치
참고 URL : https://kubernetes.io/docs/tasks/tools/install-kubectl/

> brew install kubectl

or

> brew install kubernetes-cli

설치 스크린샷

Image
2) Docker Desktop (Preview) 의 Kubernetes 탭 설정
Image
  • Kubernetes 사용하기 선택
  • 좌측 하단 Kubernetes 가 붉은색 계열이면 조금 더 기다려주세요
3) 환경 확인
Image

# 참고 - 제 계정에 추가된 설정 alias k=kubectl
alias kns="kubectl config set-context --current --namespace"
complete -F __start_kubectl k

3. Pod 에서 사용 할 디스크 공유 환경 만들기

1) 공통으로 사용할 폴더 만들기

# 개인상황에 맞게 만들면 돼요
> mkdir -p ~/WhaTap/BASE

2) yaml 폴더 만들기

# 개인상황에 맞게 만들면 돼요
> mkdir -p ~/WhaTap/BASE/yaml

3) pv 만들기

❯ cat pv-BASE.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-local
labels:
type: local
spec:
storageClassName: local
capacity:
storage: 100Gi
accessModes:
- ReadWritspanany
hostPath:
path: "/Users/mkpark/WhaTap/BASE"
> k apply -f pv-BASE.yaml

Image
  • Retain 은 디폴트 값으로 유지한다는 걸로 필수
  • RWX : ReadWriteMany 로 복수의 컨테이너에 연결해야 하므로 필수
4) 작업 디렉토리 (Namespace) 만들기

> k create ns tomcat8-test

Image
5) 작업 디렉토리에서 pvc 만들기

> kns tomcat8-test
> cat pvc-BASE.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-local
spec:
storageClassName: local
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
> k apply -f pvc-BASE.yaml

Image

4. Kubernetes 기반 Tomcat8 기동하기

1) Deployment Yaml 만들기
(1) 기본 yaml 만들기

❯ k create deploy tomcat8 --image=arm64v8/openjdk:8 --dry-run=client -oyaml > deploy-tomcat8.yaml
❯ cat deploy-tomcat8.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: tomcat8
name: tomcat8
spec:
replicas: 1
selector:
matchLabels:
app: tomcat8
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: tomcat8
spec:
containers:
- image: arm64v8/openjdk:8
name: openjdk
resources: {}
status: {}

Image
(2) 기본 yaml 에 공유 Volume 붙이기

volumeMounts:
- mountPath: "/data"
name: pvc-volume
volumes:
- name: pvc-volume
persistentVolumeClaim:
claimName: pvc-local

Image
(3) 기본 yaml에 CPU / Memory Resource 제한 넣기

resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "384Mi"
cpu: "500m"

Image
(4) 컨테이너에서 실행할 솔루션을 공유 볼륨으로 복사

# 개인상황에 맞게 솔루션을 넣으시면 돼요
> cd ~/WhaTap/BASE/
> curl -LO https://downloads.apache.org/tomcat/tomcat-8/v8.5.63/bin/apache-tomcat-8.5.63.tar.gz
> tar -zxf apache-tomcat-8.5.63.tar.gz

Image

=> apache-tomcat-8.5.63/bin/catalina.sh 의 501/511 라인의 백그라운드 실행(&) 부분을 지워 주세요.

(5) 기본 yaml 에 솔루션 실행환경 넣기

command: ["/bin/sh", "-c"]
args:
- echo starting;
cd /data/apache-tomcat-8.5.63/bin;
./startup.sh;
echo done;

Image

2. Tomcat8 을 Deployment 로 실행하기

> k apply -f deploy-tomcat8.yaml

Image

3. Tomcat8 Deployment에 Service Port 붙이기

# 기본 yaml 만들기
> k expose deployment tomcat8 --name=svc-tomcat8 --type=NodePort --port=8080
--target-port=8080 --dry-run=client -oyaml > svc-tomcat8.yaml

Image

# 다음 내용 추가
nodePort: 32000

접근을 편하게 하기 위해 NodePort 추가 (30000 ~ 32000 사이 지정)

Image

# 서비스 생성
> k apply -f svc-tomcat8.yaml

Image

4. Tomcat8 기본 페이지 접근

1) Node 주소 확인

> k get no -owide

Image
2) Tomcat 페이지 접속

http://192.168.65.4:32000

Image

IV. YouTube 동영상

IT 서비스 성능 관리, 와탭으로 시작하세요.
와탭 무료로 시작하기
박명규[email protected]
Solution ConsultingTeam Leader

지금 바로
와탭을 경험해 보세요.