k8s 패키지 관리
🎈 사용하지 않는 아키텍쳐 (v2)
현재 3버전만 사용
Helm v3는 Tiller 사용 x
✔️ Version 3는 Client가 API 서버에 바로 요청
다양한 helm 저장소(레포지토리) 존재 ➜ 중앙 집중화 x
Helm Client : 명령어 ➜ Helm chart에서 패키지 가져 옴
Chart
: yaml 파일 모음 (여러 yaml 파일을 tar.zip으로 묶어놓은 것)Release
: 쿠버네티스 오브젝트 리소스(from 패키지 to 클러스터에 생성한 인스턴스)$ 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
exit 후 재접속
sudo 없이 Helm 사용
➜ ~/.zshrc
파일에서 plugins에 helm 추가
: Helm Chart 검색 사이트
➜ 실제로 패키지를 가지고 있는 레포지토리 x
차트 구조로 Git에 올려놓으면 Git이 서버가 됨
ex. Bitnami Chart GitHUB -> WP
<Chart Name>/
Chart.yaml
values.yaml
templates/
# +@
사용자 ➜ 어떤 value가 있는지만 파악해서
변경
해서 사용
✔️ Required State before Using Helm
- 관리할 kubernetes cluster 존재
- kubeconfig 필요
- helm 설치 및 구성
ArtifactHub 에서 Chart 검색
$ helm search hub wordpress
Bitnami repository에서 저장소 추가
➜ 주소는 중요하지만 이름은 중요 x
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add xyz https://charts.bitnami.com/bitnami # repo 이름 xyz로 레포지토리 추가
저장소 추가 확인
$ helm repo list
저장소 삭제
$ helm repo remove bitnami
실제 연결 된 레포지토리(저장소)에서 Chart 검색
$ helm search repo [pattern]
$ helm search repo wordpress
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/wordpress 14.2.7 5.9.3 WordPress is the world's most popular blogging ...
bitnami/wordpress-intel 1.3.0 5.9.3 WordPress for Intel is the most popular bloggin...
이름 양식 : [레지스트리 이름]/[Chart 이름]
Chart 설치
$ helm install [realease 이름] [chart 이름]
$ helm install mywordpress bitnami/wordpress
NAME: mywordpress
LAST DEPLOYED: Fri May 27 02:36:01 2022
NAMESPACE: default # NS 사용
STATUS: deployed # 상태
REVISION: 1 # 자체적 업데이트 기능
TEST SUITE: None
NOTES:
CHART NAME: wordpress
CHART VERSION: 14.2.7
APP VERSION: 5.9.3
... # 설명 (NOTES.txt 파일 내용) -> 없을 수도 있음
release 확인
$ helm list
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mywordpress default 1 2022-05-27 02:36:01.239981111 +0000 UTC deployed wordpress-14.2.7 5.9.3
release 삭제
$ helm uninstall mywordpress
생성 된 리소스 확인
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/mywordpress-7fc5c797f7-jw6bp 0/1 Pending 0 4m55s
pod/mywordpress-mariadb-0 0/1 Pending 0 4m54s
pod/nfs-client-provisioner-758f8cd4d6-svrqw 1/1 Running 2 (163m ago) 2d4h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 4d13h
service/mywordpress LoadBalancer 10.233.37.252 192.168.100.241 80:32514/TCP,443:31270/TCP 4m55s
service/mywordpress-mariadb ClusterIP 10.233.27.4 <none> 3306/TCP 4m56s
service/nginx-svc-lb LoadBalancer 10.233.24.166 192.168.100.240 80:32404/TCP,443:31238/TCP 2d2h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mywordpress 0/1 1 0 4m55s
deployment.apps/nfs-client-provisioner 1/1 1 1 2d4h
NAME DESIRED CURRENT READY AGE
replicaset.apps/mywordpress-7fc5c797f7 1 1 0 4m55s
replicaset.apps/nfs-client-provisioner-758f8cd4d6 1 1 1 2d4h
NAME READY AGE
statefulset.apps/mywordpress-mariadb 0/1 4m55s
Chart 정보 확인
$ helm show
repository에 저장 된 파일의 내용이 그대로 출력
$ helm show readme bitnami/wordpress
$ helm show chart bitnami/wordpress
$ helm show values bitnami/wordpress
🎈 Chart 다운시 변수 변경
--set xx.xx=xx
옵션
레플리카 수 변경
$ helm install mywp bitnami/wordpress --set repicaCount=2
--set
➜ ini 형식(a=b), 계층적 구조는 . 으로 구분
$ helm install mywp bitnami/wordpress --set repicaCount=2 --set service.type=NodePort
파라미터 여러 개 ➜ --set
여러 번
변수 파일을 만들어서 파일로 제공
$ helm show values bitnami/wordpress > wp-value.yaml
변경 내용 업그레이드
$ helm upgrade [release이름] [이름] -f [적용할 파일]
$ helm upgrade mywp bitnami/wordpress -f wp-value.yaml
Release 확인
$ helm list
revision 변경 확인
➜ 내용 upgrade
할 때마다 revision 1씩 증가
$ kubectl get all
릴리즈 upgrade 히스토리 확인
$ helm history mywp
원하는 release revision으로 복구
$ helm rollback [release][release 번호]
$ helm rollback mywp 1
realease 일부만 업그레이드
wp-value2.yaml
replicaCount: 1
service:
type: LoadBalancer
release 업그레이드
$ helm upgrade mywp bitnami/wordpress -f wp-value2.yaml
릴리즈 정보 확인
$ helm status [release 이름]
$ helm status mywp
디렉토리 생성
기본 뼈대
가 만들어져있고 변경해서 사용
$ helm create mypkg
$ cd mypkg
$ tree
패키지 생성 (tgz 파일)
$ helm package
$ helm package mypkg
생성 확인
$ ls
mypkg ✔️mypkg-0.1.0.tgz wp-value.yaml
CPU, Memory, Network IO, Disk IO
Prometheus
(De facto)해당 Architecture를 Helm chart로 한 번에 구성할 예정
각 구성 요소는 파드로 작동
빨간색 테두리 ➜ 프로메테우스 기능
Retrieval : read(회수/수집) ➜ 메트릭을 요청해서 가져오는 형태
pull metrics
: 메트릭스(수집 가능한 요소) 가져오기(pull)TSDM (Time Series DB, 시계열 DB)
시간대별
로 데이터를 정렬한 DB
➜ CPU 사용량 등을 시간 순에 맞추어서 local (pvc-pv)에 저장
HTTP Server (Dashboard)
➜ 데이터 시각화에 특화
promQL
이라는 언어를 새로 만들었음 (여러 측정값들을 검색할 수 있는 언어)
v 모니터링 용도의 인터페이스 제공하지 않기 때문에 사용하지 않을 예정
prometheus + [grafana]
시각화 오픈 소스
Service Discovery
➜ 요청 대상
이 누구인지 특정
k8s ➜ api server에게 질의하고 응답 받기 ✔️
file_sd ➜ 타겟이 되는 서버, 애플리케이션을 직접 파일로 지정 가능
pagerduty
-> 알림 통합 관리
SaaS🎈 kube-prometheus-stack
Chart
: Prometheus Operator로 만든 stack
➜ Grafana Dashboard 까지 한 번에 설치 가능
➕
crd
를 통해서 리소스 커스텀 정의 가능$ kubectl api-resources | grep crd
Custom Resource는 OperatorFramework + CRD로 생성
operator은 리소스 만들어지는 순서 등의 세세한 사항도 정의 가능
🎈 설치
프로메테우스 Helm 레포지토리 추가
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
작업 디렉토리 : ~/yaml/helm/prometheus
변경할 환경변수 정보에 대한 yaml 파일 작성
prom-values.yaml
grafana:
service:
type: LoadBlancer
monitor NS
생성
별도의 NS 만들어서 관리하는 것이 좋음
$ kubectl create ns monitor
kube-prometheus-stack Release 설치
$ helm install prom prometheus-community/kube-prometheus-stack -f prom-values.yaml -n monitor
monitor NS로 이동
➜ 이동하지 않을 시 default NS에 있기 때문에 확인 불가
$ kubens monitor
생성 된 오브젝트 확인
$ kubectl get all
🎈 설치 확인
설치 완료 후, 브라우저에서 192.168.100.240
으로 접속
로그인 정보 values
파일에서 확인
좌측 상단 general/home
열어보면 dashboard 검색
가능
💡 도구들이 주기적으로 업데이트 되므로 수시로 확인 필수!
Log는 중요한 정보이므로 항상 주시하기
🎈 Logging 도구 조합
1) ELK : Elastic Search + Logstash(Java) + Kibana
2) EFK Stack
3) Elastic Stack : Elastic Search + Beat + Kibana
🎈 EFK 도구 🌟
Fluent bit
: 로그 수집기 (로그 저장소)Elastic Search
: 검색엔진 로그 수집 (로그 검색소)Kibana
: 로그 데이터 시각화Elastic Search 레포지토리 다운 및 레포지토리 정보 업데이트
$ helm repo add elastic https://helm.elastic.co
$ helm repo update
레포지토리 정보 확인 / Elastic Search 레포지토리 생성 확인
$ helm repo list
$ helm search repo elastic
EFK 실습 전용 디렉토리 생성
$ mkdir efk && cd efk
Elastric Search에 대한 변수 정보를 es-value.yaml
파일에 저장
$ 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"
logging NS
생성 후 해당 NS에서 Elastic Search 생성
$ kubectl create ns logging
$ helm install elastic elastic/elasticsearch -f es-value.yaml -n logging
FluentBit GitHub Repository
➜ output에 보면 k8s와 연동시키는 내용 있음
Fluent Bit 디렉토리 복제해오기
$ git clone https://github.com/fluent/fluent-bit-kubernetes-logging.git
작업 디렉토리 : ~/fluent-bit-kubernetes-logging
$ cd fluent-bit-kubernetes-logging
Fluent Bit 정보 확인
$ ls
LICENSE fluent-bit-role-binding-1.22.yaml
README.md fluent-bit-role-binding.yaml
fluent-bit-config-kafka-rest.yml fluent-bit-role.yaml
fluent-bit-daemonset-kafka-rest.yml fluent-bit-service-account.yaml
fluent-bit-openshift-security-context-constraints.yaml output
fluent-bit-role-1.22.yaml testpod.yml
Fluent Bit와 관련된 svc, role, rolebinding 생성
$ 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
작업 디렉토리 : sfluent-bit-kubernetes-logging/output/elasticsearch
$ cd fluent-bit-kubernetes-logging/output/elasticsearch
$ ls
fluent-bit-configmap.yaml fluent-bit-ds-minikube.yaml fluent-bit-ds.yaml
fluent-bit-ds.yaml
파일 수정
32 - name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch-master"
ConfigMap, Daemonset 생성
$ kubectl create -f fluent-bit-configmap.yaml
$ kubectl create -f fluent-bit-ds.yaml
Kibana 변수 파일을 로컬에 파일로 저장
$ helm show values elastic/kibana > kibana-value.yaml
kibana-value.yaml
파일 수정
49
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "500m"
memory: "1Gi"
120
type: LoadBalancer
환경변수 변경 파일 적용하여 kibana 다운
$ helm install kibana elastic/kibana -f kibana-value.yaml -n logging
Portfowarding
$ kubectl port-forward -n logging elasticsearch-master-0 9200:9200
Portfowarding 확인
$ curl localhost:9200
You know --- 라고 나와야 성공
🎈 접속 확인
➜ 웹브라우저에서 192.168.100.240:5601
으로 접속
Kibana는 인증서가 없어서 무인증 접속
이므로 주의
서비스 포트는 5601
로그 인덱싱
explore my own 선택 logstash-시간이기 때문에 (하루에 하나씩 만들어짐) 필요하면 분리가능 좌측 상단 햄버거바 ➜ stack management ➜ kibana ➜ index pattern
create index pattern
logstash (우측에서 확인)
수집한 로그 확인
햄버거바 ➜analytics ➜ discover
📌 --- 강의 보기
ssh node2 접속
3.14* 검색?
EFK 설치 후 파드 삭제해도 상관 x
Elastic Search가 로그 기록
zshell powerlebel10k 테마 설치
레포지토리 복제
$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
적용
$ exec zsh
or
$ exit 후 재접속
재설정
$ p10k configure
컨텍스트 사용시 사용하는 명령어
패키지 다운로드
$ wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubectx
$ wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubens
설치
$ sudo install kubectx /usr/local/bin
$ sudo install kubens /usr/local/bin
확인
$ which kubectx
/usr/local/bin/kubectx
$ which kubens
/usr/local/bin/kubens
컨텍스트 확인
$ kubectx
컨텍스트 변경
$ kubectx [컨텍스트 이름]
NS 확인
$ kubens
NS 변경
~/.kube/config
파일 수정 없이 사용자 NS 변경 가능
$ kubens [NS 이름]
➕
manifest
: 오브젝트를 정의하는 코드(yaml 파일)
🌟 오픈소스의 LISENSE 🌟
➕ 참고 : 라이선스 종류
항상 라이센스 고지할 것
오픈소스라고 해서 무조건 다 사용할 수 있는 것 x
코드 공개와는 무관
이중 라이센스 사용시 오픈소스로 취급 x
LISENSE.txt 참고