[ft_services] 4. sh파일 생성하기. , grafana란? nginx란? influxDB란?

풀이 정리

우선 미니쿠베가 설치 안되어있다면, 설치하기.

  • ~/.zshrc에 아래 코드 추가(미니쿠베파일을 goinfre파일에 설치한다.)
    (이건 개인 맥이나 개인 컴퓨터면 안해도 되어요. 42seoul 클러스터 mac인 경우 설정해주세요, 설치 경로 변경)
export MINIKUBE_HOME=~/goinfre

아래 미니쿠베 설치.(만약 brew없으면 brew도 설치하세요.)

brew install minikube
main()
{
	introduce
	minikube_setup
	make_images
	yaml_services
}

메인문은 4가지로 구성되어있다.
1. introduce : sh 파일의 만든이 정보를 넣어줍니다.
2. minikube_setup : 미니쿠베를 시작하고 설정을 해줍니다.
3. make_images : 이미지파일을 만들어 줍니다.
4. yaml_services : yaml파일로 생성한 이미지파일로 pod를 생성해주고, 파드의 오브젝트를 설정합니다.

1. introduce

introduce()
{
	echo -e $GREEN
	echo "by. hoylee, 21-04-21"
	echo "FT_services,start!"

	echo -e $WHITE
	echo -e $CYAN
	echo "=============================================================================================="
	echo -e $WHITE
	echo " 8888888888 88888888888          88        d88888b  8b   d8  88        88888888  8888888"
	echo " 888            888              88        88   88  88   88  88        88        88"
	echo " 888            888              88        88   88  88   88  88        88        88"
	echo " 8888888        888              8888888h  88   88  88   88  88        88888888  8888888"
	echo " 888            888              88888888  88   88  \"888888  88        88        88"
	echo " 888            888              88    88  88   88       8b  88        88        88"
	echo " 888            888              88    88  88   88      8b   8888888b  88        88"
	echo " 888            888   88888888   88    88  d88888b  8888b    88888888  88888888  8888888"
	echo -e $CYAN
	echo "=============================================================================================="
	echo -e $BLUE

	echo -e $CYAN
	echo -e $WHITE
}

2. minikube_setup

minikube_setup()
{

	minikube delete
	minikube start --driver=virtualbox --cpus=2
	minikube addons enable dashboard
	minikube addons list
	more_addons
	echo 😻- complete addons..!
	kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
	kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml
	kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
	kubectl apply -f srcs/yaml_metallb/metallb_complete.yaml
	eval $(minikube docker-env)
	echo $DOCKER_HOST
	echo -en $GREEN
	echo "Minikube is ready !"
	echo
}
  • 쿠버네티스를 시작할 가상머신을 virtualbox를 사용합니다. virtualbox를 사용하는 이유는 docker 의 사용환경이 linux환경일 때 더 높은 효율로 자원들을 컨테이너를 만들수 있습니다. 쿠버네티스의 linux가상 머신의 기본툴이 virtualbox입니다. 드라이브 종류
  • 쿠버네티스에서 제공하는 로드벨런스 metallb를 활성화 합니다. addons 추가 설명
  • 추가적으로 metlalb설정 했습니다.
  • minikube docker-env 을 하는 이유는 내 컴퓨터에 있는 도커 CLI와 쿠버네티스의 docker server 를 연결해줄려고 사용했습니다.
  • 쿠버네티스에는 도커는 있지만, docker server가 내장되어있지만, 이를 컨트롤 하기 위해서 내 로컬호스트의 컴퓨터와 연결해서 미니쿠베 도커에게 요청을 할수 있습니다.

more_addons

more_addons()
{
	echo -e "addons 더 필요한게 있으면 입력하세요, 그냥 진행하려면 enter"
	echo -e "ex) ambassador or auto-pause "
	read word
	while [[ $word != '' ]];
	do
		flag1=1
		for value in "${addons_list[@]}"; do
		    if [ $word == $value ] ; then
				minikube addons enable $word
				minikube addons list
				flag1=2
				echo "add complete $word"
			fi
		done
		if [ $flag1 -eq 1 ] ; then
			echo "==================================================================="
			echo -e $RED"$word is not inside addons. addons list,"
			echo -e $WHITE
			echo "Please input addons name or if you dont need addons just put enter"
			echo "==================================================================="
		fi
		if [ $flag1 -eq 2 ] ; then
			echo -e "addons 더 필요한게 있으면 입력하세요, 그냥 진행하려면 enter"
			echo -e "ex) ambassador or auto-pause "
		fi
		read word
	done
}
  • 여기서는 addons list를 추가적으로 입력 받고 싶으면 입력 받게끔 만들었는데, 과제만 목적이라면 굳이 안해도 괜찮다.
  • '' 빈 공간을 입력을 받으면 그냥 넘어간다.
  • addlist에 없는 값을 입력 받으면 잘못된 입력이라고 띄운다.
  • addon list중에 하나를 입력받으면 활성화된다.

코드 실행 후 사진!

  • metalLB 설정도 잘 진행 되고 addons에 관련해서 더 활성화 시킬 에드온이 있는지 물어본다.

metallb.yaml

apiVersion: v1
kind: ConfigMap
metadata:
    namespace: metallb-system
    name: config
data:
    config: |
        address-pools:
        - name: default
            protocol: layer2
            addresses:
            - 192.98.100.92-192.98.100.92
  • 컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API 오브젝트이다. 파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로 컨피그맵을 사용할 수 있다.
  • metadta 에서 네임스패이스와 이름을 설정한다.
  • metalLB란?
  • layer2 : 이 중 Layer 2 설정은 가장 심플하지만, 노드 하나가 트래픽을 일단 다 받으며 로드밸런싱을 한다음 서비스에 연결된 모든 포드로 트래픽을 분산시키는 방식이라는 특징을 가지고 있습니다

3. make_images

make_images()
{
	images_kind=("nginx"  "wordpress" "mysql" "phpmyadmin" "ftps" "grafana" "influxdb")

	for kind in "${images_kind[@]}"
	do
		echo -en $WHITE
		echo "📲 Building $kind image..."
		echo -en $YELLOW
		docker build -t $kind srcs/$kind/
		echo "$kind === "
		echo -en $GREEN
		echo "📱 success built $kind image !"
		echo
	done
	echo -en $WHITE
}
  • 도커를 이미지를 빌드합니다. 도커 설명은 ft_server때 정리해둔 글이있어요! 많이 봐주세요 ㅠ.ㅠ.도커란?
  • docker build -t nginx srcs/nginx/ 를 통해 srcs폴더에있는 각각의 dockerfile로 빌드합니다.

    색 넣는거 해두면 좋아요. 나중에 sh파일 돌릴 때 빌드마다 노란색으로 구분되서 보여서 실행 상황 보기 편했어요.

yaml_services

yaml_services()
{
	kubectl apply -f srcs/yaml_services/nginx.yaml
	kubectl apply -f srcs/yaml_services/wordpress.yaml
	kubectl apply -f srcs/yaml_services/mysql.yaml
	kubectl apply -f srcs/yaml_services/phpmyadmin.yaml
	kubectl apply -f srcs/yaml_services/ftps.yaml
	kubectl apply -f srcs/yaml_services/grafana.yaml
	kubectl apply -f srcs/yaml_services/influxdb.yaml
}
  • 생성한 이미지파일을 컨테이너로 생성하고, 컨테이너를 묶어 pod를 생성합니다.
  • 여기서는 이번 실습에서 주로 사용되는 kind는 디플로이먼트와 서비스를 사용합니다.
  • deployment : 이미지파일을 통해 컨테이너를 생성하고 리플리카셋을 통해 하나의 파드에 무슨종류의 컨테이너가 몇개씩 사용할지 정해줍니다. 파드의 설정도 진행해줍니다.
  • services : 파드를 외부와 연결해주는 오브젝트를 생성합니다.

addons 추가 설명

minikube addons list

dashboard : 클러스터의 웹 UI 툴
efk : 로그분석 툴(Elasticsearch, Fluentd 및 Kibana)
freshpod : 이미지 리빌드시 pod 재시작
gvisor : 컨테이너 런타임을 대체하여 안전하게 pod 실행
heapster : 컴퓨터 리소스 분석 및 클러스터 모니터링
ingress : 쿠버네티스 Ingress 리소스를 기반으로 구축된 NGINX 컨트롤러
logviewer : 경량 로그 툴
metrics-server : 클러스터 자원 사용률 및 활용도를 수집
** addons의 툴은 각자 기능이 있는데, 구글에 검색하면 설명이나옴. 궁금하면 검색 해볼것 **
참고 : https://www.oops4u.com/2372
> addons : 부가 기능은 Kubernetes의 기능을 확장합니다

좋은 웹페이지 즐겨찾기