쿠버네티스 살펴보기 | 4. 쿠버네티스 처음 배포하기

nawnoes·2021년 7월 20일
0

Kubernetes

목록 보기
4/4

subicura님의 쿠버네티스 안내서를 따라해보며 쿠버네티스 기본 사용법에 대해 익히고 정리.

4. 쿠버네티스 처음 배포하기

가이드

쿠버네티스는 설치부터 운영, 여러 고급 기능들을 알아야한다. 하지만 그 전반적인 과정이 어렵고 처음 접하는 사람에게 쉽지 않다. subicura님의 안내서는 가이드를 통해 최소한의 기능을 배우고 동작원리를 이해하는 것에 초점을 맞춰 자연스럽게 기능을 습득할 수 있도록 가이드 한다.

준비

쿠버네티스 클러스터와 kubctl을 설치한다. 대표적인 개발환경으로는 minikube, k3s, docker for desktop, kind가 있으며, 대부분에서 사용할수 있고 간편하면서 무료인 minikube를 추천한다. minikube를 사용할 수 없는 경우 k3s를 추천

개발과 운영환경의 가장 큰 차이점은 개발환경은 단일 노드를 사용하기 때문에 여러 노드에 스케줄링 테스트가 어렵다. 그리고 loadbalancer와 persistent local storage 또한 가상으로 만들어야 하기 때문에 정확한 실습을 위해서는 운영환경에서 진행해야 한다.

minikube 설치

쿠버네티스 클러스터를 실행하기 위해 최소한 scheduler,controller, api-server,etcd, kubelet, kube-proxy를 설치하고, 필요에 따라 dns, ingress controller, storage class 등을 설치해야한다. 이러한 설치과정도 중요하지만 하지만 이야기만 들어도 시작하기 전에 힘이 빠진다.

minikube는 쿠버네티스환경을 로컬에서 쉽고 빠르게 테스트 할 수 있게 해주는 도구로 다양한 OS와 가상환경에서 지원한다.🥳

필요한 자원

  • 2cpu
  • 2gb memory
  • 20GB of free disk

설치

본인의 경우 macos를 사용하여, macos 설치 가이드를 따른다.

brew install minikube

기본 명령어

버전확인

minikube version

가상머신 시작

# 가상머신 시작
minikube start --driver=hyperkit
# driver 에러가 발생한다면 virtual box 사용
minikube start --driver=virtualbox
# 특정 k8s 버전 실행
minikube start - --kubernetes-version=v1.20.0

hyperkit 이 설치되어 있지 않다고 메세지 후 hyperkit 설치

가상머신 시작

상태확인

minikube status

정지

minikube stop

삭제

minikube delete

ssh 접속

minikube ssh

ip 확인

minikube ip

실습 후 minikube 종료

CPU와 메모리를 차지 하기 때문에 minikube 실습이 완료되면 종료한다.

쿠버네티스에 워드프레스 올리기


쿠버네티스는 도커 컴포즈에 비해 더 다양한 컴포넌트로 구성되며, service pod, replicaset, deployment등 다양한 용어들이 나온다. 용어들이 익숙하지 않지만 실습을 진행해보면서 직접 익힌다.

wordpress-k8s.yml 작성

kube-guide/index/wordpress-k8s.yml 작성

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: mysql:5.6
          name: mysql
          env:
            - 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.5.3-apache
          name: wordpress
          env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql
            - 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

오타가 있으면 동작하지 않는다. 오타에 주의 필요.

wordpress-k8s.yml 설정 적용

kubectl apply -f wordpress-k8s.yml

배포상태 확인

kubecrl get all

pod/wordpress-5f59577d4d-xmjnfpod/wordpress-mysql-545d9c6dc-6ppx2의 동작을 확인한다. STATUS-Running

Running 상태의 경우 service/wordpress의 포트가 몇번인지 확인 후 minikube ip 명령어로 얻은 주소로 접속

minikube ip 확인

wordpress 접속

위에서 얻은 주소화 포트를 결합해서 http://192.168.64.2:32692 으로 접속

🙌 첫 쿠버네티스 배포 성공!!

마무리

처음으로 쿠버네티스 배포에 성공. 사용 후에는 컴퓨터 자원을 위해 리소스를 제거한다. 다음 글에서는 쿠버네티스 안내서에 따라 기본적인 내용들에 대해 익히도록한다.

kubectl delete -f wordpress-k8s.yml

0개의 댓글