zsh의 테마
https://github.com/romkatv/powerlevel10k
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
홈밑에 .oh-my-zsh 밑에 설치
p10k configure
kubectl 하면 사용하는 context가 나옴
~ > with vagrant@k8s-node1 at 10:09:55
폰트가 필요한데 폰트는 가상컴퓨터, 윈도우에도 있어야함
https://github.com/ahmetb/kubectx
~ > echo $PATH with vagrant@k8s-node1 at 00:49:18
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
~ > sudo install kubectx /usr/local/bin/
~ > sudo install kubens /usr/local/bin/
mv, cp로 파일을 bin아래로 옮길 수 있지만 install 사용하기
kubectx 컨텍스트 전환
kubens 작업하고 있는곳 보이고
kubens dev 네임스페이스 변경
원리는 -> kubectl config get-contexts에서 ns를 설정
kubens 안쓰면 vi ~/.kube/config 가서 작업해야함
패키지 관리자
수많은 리소스 파일 프로젝트 -> 패키지로 관리하자
yaml 파일의 모음 -> 쿠버네티스 패키지
Helm v2의 아키텍쳐.
V3에서는 클라이언트가 바로 API서버로 요청
용어
helm v3는 tiller를 사용하지 않음
사전요구사항
1. 관리할 클러스터
2. configurations (.kube/config)
3. Helm
https://helm.sh/docs/intro/install/
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null # 서명키 등록
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list # 레포지토리 추가
sudo apt-get update
sudo apt-get install helm
~ > helm version at kube kubernetes-admin@cluster.local with vagrant@k8s-node1 at 10:09:55
version.BuildInfo{Version:"v3.9.0"}
Helm Chart 검색
https://artifacthub.io/
<Chart Name>/
Chart.yaml # 반드시필요한 파일, 차트의 메타데이터
values.yaml # 패키지를 커스터마이즈(벨류) 복제본 몇개등 사용자가 설정할 수 있는 값
templates/ # 실제 YAML오브젝트 파일
helm search hub <PATTERN>
https://github.com/bitnami/charts
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
helm search repo <저장소> <PATTERN>
이름/~~
레지스트리에 따라 패키지명이 달라짐
helm install mywordpress bitnami/wordpress
NAME: mywordpress
LAST DEPLOYED: Fri May 27 02:36:31 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: wordpress
CHART VERSION: 14.2.7
APP VERSION: 5.9.3
....
NOTES.txt
설명 을 해주는 파일
helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mywp default 1 2022-05-27 03:12:54.376876194 +0000 UTC deployed wordpress-14.2.7 5.9.3
helm uninstall mywordpress
https://github.com/bitnami/charts/tree/master/bitnami/wordpress
에 있는 README.md, chart.yaml, values.yaml 값을 가져옴
helm show readme binami/wordpress
helm show chart binami/wordpress
helm show values binami/wordpress
helm install mywp bitnami/wordpress --set replicaCount=2
helm install mywp bitnami/wordpress --set replicaCount=2 --set service.type=NodePort
helm show value bitnami/wordpress > wp-value.yaml
파일 수정
helm upgrade mywp bitnami/wordpress -f wp-value.yaml
wp-value2.yaml
replicaCount: 1
service:
type: LoadBalancer
helm upgrade mywp bitnami/wordpress -f wp-value2.yaml
helm history mywp
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Fri May 27 03:12:54 2022 deployed wordpress-14.2.7 5.9.3 Install complete
helm rollback mywp 1
--generate-name
: 이름을 랜덤하게 생성
helm create mypkg
: 기본 뼈대가 생성 like ansible-galaxy init
helm package mypkg
: 아카이브로 만들어줌
Manifest = 오브젝트를 정의하는 코드
https://artifacthub.io/packages/helm/prometheus-community/prometheus
https://github.com/prometheus-community/helm-charts/
CPU, Memoty, Network IO, Disk IO
Prometheus서버 : Retrieval(READ, 회수, 수집)
short-lived jobs 생명주기가 짧은 애들 측정을 제대로 못하는 경우가 생김
pull metrics 요청을 가져옴
짧은 애들은 가져오기전에 생명주기가 끝날 수 도 있음 -> 모니터링 불가
-> Pushgateway가 대신해서 생명주기가 끝나기전에 메트릭을 받아둠
jobs/exporters
TSDB Time Series DB
시계열 데이터베이스 : 시간대별로 데이터를 저장
PromQL 이라는 전용언어 쿼리 랭귀지 -> Low level
TSDB에 있는 여러가지 측정값들을 검색할 수있는 언어를 만듬
AlertManager -> 알람
CPU Memeory 사용량이 넘는다하면 알람을 보냄
pagerduty SaaS 서비스
대부분 슬랙으로 보냄, 에전에는 SMS 문자로 많이
별개의 오픈소스 Granfana
https://grafana.com/\
다양한 소스로 부터 데이터를 가져와서 시각화 함
https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
prom-value.yaml
grafana:
service:
type: LoadBalancer
helm설치시 디폴트 네임스페이스 씀
별도의 네임스페이스 만들어서 분리하는게 좋음
kubectl create ns monitor
helm install prom prometheus-community/kube-prometheus-stack -f prom-values.yaml -n monitor
웹브라우저
http://192.168.100.24X
ID: admin
PWD: prom-operator
로그를 저장
ELK Stack: Elasticsearch + Logstash + Kibana
EFK Stack: Elasticsearch + Fluentd + Kibana
Elasticsearch + Fluent Bit + Kibana
Elastic Stack: Elasticsearch + Beat + Kibana
아래로 갈수록 메모리 씨피유를 덜 쓰게 됨
Fluent Bit 가 로그를 얘한테 보내줌. 얘는 검색엔진 데이터 저장소가 있고 저장소에서 검색하는 엔진 -> 로그를 저장하고 검색하는 용도로 쓰지만 원래 용도는 검색용임 검색엔진 만들때 쓰는건임
Elasticsearch 통해서 kibana로 로그를 시각적으로 보여줌
helm repo add elastic https://helm.elastic.co
helm repo update
helm show values elastic/elasticsearch > es-value.yaml
es-value.yaml
18 replicas: 1
19 minimumMasterNodes: 1
80 resources:
81 requests:
82 cpu: "500m"
83 memory: "1Gi"
84 limits:
85 cpu: "500m"
86 memory: "1Gi"
kubectl create ns logging
helm install elastic elastic/elasticsearch -f es-value.yaml -n logging
로그 수집, 로그 수집기 -> 로그컬렉터, 로그 스트리머라고 함
git clone https://github.com/fluent/fluent-bit-kubernetes-logging.git
cd fluent-bit-kubernetes-logging
kubectl create -f fluent-bit-service-account.yaml
kubectl create -f fluent-bit-role-1.22.yaml
kubectl create -f fluent-bit-role-binding-1.22.yaml
kubectl create -f output/elasticsearch/fluent-bit-configmap.yaml
fluentbit가 elasticsearch한테 데이터를 주도록 설정
output/elasticsearch/fluent-bit-ds.yaml
32 - name: FLUENT_ELASTICSEARCH_HOST
33 value: "elasticsearch-master"
kubectl create -f output/elasticsearch/fluent-bit-ds.yaml
데이터 시각화 대시보드
무인증으로 진행
5601번 포트
kubectl port-forward -n logging elasticsearch-master-0 9200:9200
curl localhost:9200
you know, for search 라고 뜨면 정상작동
helm show values elastic/kibana > kibana-value.yaml
kibana-value.yaml
49 resources:
50 requests:
51 cpu: "500m"
52 memory: "1Gi"
53 limits:
54 cpu: "500m"
55 memory: "1Gi"
외부로 노출되야함
서비스타입 변경
119 service:
120 type: LoadBalancer
helm install kibana elastic/kibana -f kibana-value.yaml -n logging
logstash-*
logstash-*
추가적으로 생성되는게 매칭이 됨