다음 포스팅은 ft_services를 진행하기 싫거나, 막막할 때 42cadet들을 위한 글임 (음슴체 주의)
큰 도움은 되지 않겠지만, 어느정도의 가이드, 참고자료를 남겨두려고 함
ft_services가 어렵거나 막막한 이유
1) 어디서 부터 시작해야 할지 막막함, 서브젝트를 읽어도 용어 & 키워드를 모름, 쿠버네티스가 뭔데?
-> 위의 3가지일 경우 그냥 "쿠버네티스" 공부하면 됨
-> 공식 홈페이지도 좋겠지만 개인적으로 빠르게 알고 싶으면 subicura 설명글보는게 정신건강에 이로움
-> 왜냐하면 쿠버네티스는 추상화를 엄청해놨기 때문에 잘 모르는 초보자가 보면 용어보고 기절함
2) 배포는 상관없으나 이제 도커 이미지를 만드는 게 힘듦, Alpine Linux의 개같음
-> 자료가 충분하지 않으나 결국 구글링이 답
-> 구글링하면 다 나온다는 말도 물론 거지같음, 원하는 자료가 먹기좋게 안나오거든
-> Alpine의 Wiki나 공홈을 적극 활용해야 어느정도 각이 잡힘
-> 예로들면 alpine grafana install 하면 원하는 자료 안나오나, (alpine apk, alpine package)에 대해서 알아두면 설치방법을 깨닫게 됨
-> openrc로 service restart하는 것은 테스트에만 하는게 좋음 (뭐만하면 사용중 혹은 에러나옴, 데몬을 직접 죽이고 키고 하는게 편함)
3) 안될 때 뭐가 안되는지 정확히 모름
-> 구글링, 슬랙을 통해 질문해야 함, 하다보면 해결되는 게 웃김, 천천히, 차분히 경우의 수를 줄인다는 생각으로 임해야 함
-> kubectl describe or logs or exec -it 적극활용
0. 프로젝트 목표
쿠버네티스, 도커를 이용하여 클러스터 관리, 배포하기
아래와 같은 토폴로지 구성하기
1. 키워드 정리 (위키백과)
Kuberetes
- web dashboard : 웹 대시보드(UI)를 통해 컨테이너화 된 애플리케이션을 클러스터에 배포하거나 관리가능하게 함
- 쿠버네티스는 컨테이너화된 애플리케이션의 자동 디플로이(deploy, 배포), 스케일링을 제공하는 오픈 소스
- 목적은 여러 클러스터의 호스트 간에 애플리케이션 컨테이너의 배치, 운영을 자동화하기 위한 플랫폼을 제공
- 도커를 포함하여 일련의 컨테이너 도구들과 함께 동작함
Clustering
- 여러개의 컴퓨터를 연결한 병렬 시스템
- 서로 통신이 가능하고 업무를 분담하여 수행함
Deployment
- 배포를 의미하는 것으로 애플리케이션이나 소프트웨어를 배포한다는 의미로 자주 사용함
- 쿠버네티스의 용어중 하나
Alpine Linux
- 작은 크기, 단순성, 빠른 부팅을 제공하는 컨테이너에 흔히 사용되는 리눅스 배포판
- 우분투나 센토스에 비해 보기 좋은 자료가 부족함
Load Balancer
- 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 분산처리하여 해결해 주는 서비스
- 실행 속도를 높임, 다운타임 최소화
- L4로드밸런서 : ip, port, mac, protocol로 트래픽을 나눔 (말 그대로 4계층 구분)
- L7로드밸런서 : http헤더, 쿠키등으로 트래픽을 나눔 (말 그대로 7계층 구분)
Grafana
- Time-series DB의 데이터를 시각화 하는데 가장 최적화된 대시보드를 제공해주는 오픈소스 툴 킷
- 다양한 DB를 연결, 시각화, 그래프를 그리는 방법도 마우스로 간단히 할 수 있음
InfluxDB
- Time-series DB, 시계열 데이터를 저장하고 활용하는데 특화된 DB
- timestamp기반의 모든 데이터의 백업 저장소로 용이
- Grafana와 많이 연동
MetalLB
- 표준 라우팅 프로토콜을 사용하여 베어 메탈 쿠버네티스 클러스터를 위한 로드 밸런서
2. 쿠버네티스
학습자료
1) 쿠버네티스 공홈
- 문서가 정리가 잘되어 있지만 애초에 용어가 어색해 읽히지도 않음..ㅜ
2) Docker로도 유명한 subicura님의 쿠버네티스 포스팅 (subicura블로그 상단에 "쿠버네티스 안내서"까지 보기를 추천)
3) 내가 subicura님의 강좌를 보고 정리한 개념 (subicura와 같음)
yaml 작성 연습
1) Deployment 작성해보기 (모든 의미 파악)
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
|
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
livenessProbe:
httpGet:
path: /
port: 80
readinessProbe:
httpGet:
path: /
port: 80
|
cs |
2) Service 작성해보기 (모든 의미 파악)
1
2
3
4
5
6
7
8
9
10
11
12
|
apiVersion: v1
kind: Service
metadata:
name: echo
spec:
type: NodePort
ports:
- port: 3000
nodePort: 32000
protocol: TCP
selector:
app: echo
|
cs |
3) 워드프레스 올려보기 + 조금 더 복잡한 배포해보기
-> yaml을 이해하면서 작성할 줄 알고, kubectl의 명령어를 어느정도 안다면, ft_services를 어떻게 해야할지 감이 잡힘
3. 도커 이미지 굽기 순서 (추천)
metalLB -> nginx -> phpmyadmin(+mysql) -> wordpress(+mysql) -> ftps -> grafana(+influxdb)
4. 이미지 만들다가 개인적으로 막혔던 곳
nginx
- alpine에서 기본적으로 service를 제공하지 않음 (openrc도 사용하지 않았음)
-> nginx -s reload로 새로고침 했음
- nginx데몬을 실행하려면 아마 /var/run/nginx 디렉토리가 있어야 했음
- alpine ssh는 아래 링크 그대로 따라하면 됨 (테스트는 로컬에서 # ssh [user]@[ip] 로 접근)
- nginx 포그라운드 실행 (nginx -g "daemon off;")
- 나머지는 ft_server와 동일
MySQL
- alpine wiki에서 설치 및 초기화를 알아 볼 것 (MySQL (MariaDB) - Production usage 쪽을 봐야 함)
- MySQL도 conf파일을 만져야 다른 곳과 통신이 가능함
-> 본인은 mariadb-server.cnf만 수정하고 완성함 (github참고하면 다들 my.cnf를 바꿈, 난 모름)
-> skip-networking을 주석처리해야 하고, bind-address를 0.0.0.0으로 풀어주면 됨
- wordpress db를 만드는 sql과 wordpress db에 테이블과 값을 넣는 것은 약간에 차이가 있음에 유의
-> wpdb를 만드는건 ft_server와 유사하고, 미리 유저를 만드는 것은 wpdb에 넣어야 함
- mysqld --user=root & 로 mysqld를 활성화 시키면 할당 늦게 켜짐에 주의 (sleep을 걸던지, shellscript if로 체크를 하던지 하기)
Wordpress
- wp에 필요한 php설치 및 nginx.conf작성은 위키가 잘 나와 있음
-> alpine wordpress로 검색 + alpine php nginx로 검색
- wp-config.php에 설정 필요
-> mysql에 작성한 wpdb를 만드는 sql에 db_name, db_user, db_password가 무조건 있을 텐데 그대로 넣어주면 됨
-> 마찬가지로 db_host는 mysql의 아이피를 적던지 쿠버네티스가 dns를 클러스터내에서 제공하니 그냥 'mysql'적어도 됨
-> ping mysql 해보길 바람
- 유저가 이미 세팅되어 있는 상태여야 함
-> phpmyadmin에서 wpdb를 선택하고 내보내기 하면 그대로 쓸 수 있는 SQL파일이 나옴
-> 내보내기 할 때 커스텀 내보내기는 하면 안됨 -> 잘못하면 컨테이너 재시작 때 덮어쓰기 될 수도 있음
-> 그것을 MySQL에 넣어주면 됨 (참고로 MySQL의 wpdb에 넣어줘야 함)
-> mysql < create_user.sql
-> mysql wordpress_db < wpdb.sql
- php-fpm7 & nginx -g "daemon off;"로 실행
PhpMyAdmin
- 마찬가지로 conf파일 수정해야 함 (config.inc.php)
-> phpmyadmin remote mysql이라고 검색하면 나옴
-> 나는 호스트부분만 수정함
- php-fpm7 & nginx -g "daemon off;"로 실행
ftps
- port 번호가 중요, 공부할 것
- active mode, passive mode 공부할 것
- 설정파일은 검색 + github참고 함
- 테스트는 파일질라로 할 것
grafana & influxdb & telegraf
- 설치 방법은 alpine package + alpine apk에 대해서 검색하고 찾아 볼 것
- telegraf.conf은 agent, output, input으로 크게 나뉘어져 있는데 몇가지 수정하지 않아도 해결 가능
- influxdb로 pvc를 잡았다면, 아마 /var/lib/influxdb 로 잡았을 텐데, 아무런 설정 및 옵션없이 influxd로 실행시키면 /var/lib/influxdb를 본인 데이터 디렉터리로 잡지 않음(아마 다른 default.conf파일이 존재하는 듯)
-> 그래서 influxd run --config [conf file]로 실행시킬 것 (conf file는 아마 일반적으로 /etc/influxdb.conf로 존재)
- grafana-server 를 실행시킬려면 /usr/share/garfana에서 grafana-server 하던지 아니면 grafana-server -homepath옵션을 주면 됨
- grafana 데이터 파일 및 백업은 아래와 같음
-> grafana는 어디에 백업파일을?
community.grafana.com/t/backup-restore-grafana-server/121
%%% 참고 문서는 워낙 많음에 유의 %%%
'42cursus' 카테고리의 다른 글
minishell - 간단한 정리 (0) | 2021.02.18 |
---|---|
minishell - 명령어와 외부함수 정리하기 (command & External functions, 42seoul) (0) | 2021.01.25 |
Kubernetes(쿠버네티스) 개념 정리하기 (0) | 2021.01.07 |
libasm - 참고 자료 위주로 정리하기 (42seoul) (1) | 2020.11.28 |
cub3d - mlx사용법 위주로 정리하기 (42seoul) (2) | 2020.11.03 |