73/120

김건호·2022년 5월 27일
0
post-custom-banner

powerlevel10k

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 

폰트가 필요한데 폰트는 가상컴퓨터, 윈도우에도 있어야함

kubectx & kubens

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 가서 작업해야함

Helm

패키지 관리자
수많은 리소스 파일 프로젝트 -> 패키지로 관리하자
yaml 파일의 모음 -> 쿠버네티스 패키지


Helm v2의 아키텍쳐.
V3에서는 클라이언트가 바로 API서버로 요청

용어

  • Chart: 차트, 패키지패키지 여러개의 yaml을 tar로 묶어놓은것
  • Helm Client : 명령어
  • Repository: 차트 저장소
  • Release: 쿠버네티스 오브젝트 리소스 (패키지 -> 클러스터에 생성한 인스턴스)
  • Tiller : 헬름 입장에서 서버 Pod를 띄우게 됨 grpc(http) 로 통신 비동기 처리
    틸러를 V3에서는없애버림 문제가 있어서 -> 모든 권한을 다 가지고 있어야하는 문제
    중요한건 이게 외부로 노출되어 있어야함 -> 보안사고

helm v3는 tiller를 사용하지 않음

helm client 설치

사전요구사항
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오브젝트 파일
  • Chart.yaml: 차트의 메타데이타
  • values.yaml: 패키지를 커스터마이즈/사용자화(벨류)
  • templates: YAML 오브젝트 파일

helm 사용법

aritifacthub 검색

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 = 오브젝트를 정의하는 코드

Monitoring & Logging

Prometheus Monitoring

https://artifacthub.io/packages/helm/prometheus-community/prometheus
https://github.com/prometheus-community/helm-charts/

CPU, Memoty, Network IO, Disk IO

  • Heapster + InfluxDB: X
    - metrics-server: DB 없음, 실시간
    - CPU, Memory
    - Prometheus

  • 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

EFK Logging

로그를 저장

ELK Stack: Elasticsearch + Logstash + Kibana
EFK Stack: Elasticsearch + Fluentd + Kibana
Elasticsearch + Fluent Bit + Kibana
Elastic Stack: Elasticsearch + Beat + Kibana

아래로 갈수록 메모리 씨피유를 덜 쓰게 됨

Elasticsearch

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

Fluent Bit

로그 수집, 로그 수집기 -> 로그컬렉터, 로그 스트리머라고 함

https://github.com/fluent/fluent-bit-kubernetes-logging

git clone https://github.com/fluent/fluent-bit-kubernetes-logging.git
cd  fluent-bit-kubernetes-logging

rbac 역할 생성

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

Kibana

데이터 시각화 대시보드

무인증으로 진행
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

http://192.168.100.X:5601

  • 햄버거 -> Management -> Stack Management
    - Kibana -> Index Pattern
    - Create Index Pattern
    - Name: logstash-*
    FB-> ES 전송을 시키고 저장하는데 그파일이름이 logstash-시간이기 때문에 (하루에 하나씩 만들어짐) 필요하면 분리가능
    따라서
    logstash-* 추가적으로 생성되는게 매칭이 됨
    - Timestamp: @timestamp
  • 햄버거 -> Analystics -> Discover
profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

0개의 댓글