다음 포스팅은 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) 쿠버네티스 공홈
- 문서가 정리가 잘되어 있지만 애초에 용어가 어색해 읽히지도 않음..ㅜ
쿠버네티스 문서
쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈소스 컨테이너 오케스트레이션 엔진이다. 오픈소스 프로젝트는 Cloud Native Computing Foundation에서 주관한다.
kubernetes.io
2) Docker로도 유명한 subicura님의 쿠버네티스 포스팅 (subicura블로그 상단에 "쿠버네티스 안내서"까지 보기를 추천)
쿠버네티스 시작하기 - Kubernetes란 무엇인가?
쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다. 1주일에 수십억 개의 컨테이너를 생성하는 구글이 내부 배포시스템으로 사용하던 borg를 기
subicura.com
3) 내가 subicura님의 강좌를 보고 정리한 개념 (subicura와 같음)
Kubernetes(쿠버네티스) 개념 알아보기
ㅁㄴㅇㅁㄴㅇ ㅁㄴㅇㅁㄴㅇ
malbongcode.tistory.com
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) 워드프레스 올려보기 + 조금 더 복잡한 배포해보기
웹 애플리케이션 배포
Pod, ReplicaSet, Deployment, Service를 이용하여 기본적인 웹 애플리케이션을 배포합니다.
subicura.com
-> 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] 로 접근)
SSH 접속 가능한 알파인 도커 이미지 빌드 - 제타위키
다음 문자열 포함...
zetawiki.com
- 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
Backup/restore grafana server
We could do with a mechanism that would allow a restored copy of grafana.db to successfully run on a new/different server. This would also be useful for running a mirror without the need to manually import dashboards between servers. Is there a good way to
community.grafana.com
%%% 참고 문서는 워낙 많음에 유의 %%%
'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 |