쿠버네티스 전문가 양성과정 10주차 5일(2/24)

최수환·2023년 2월 24일
0

Kubernetes

목록 보기
46/75
post-thumbnail

Helm

  • 쿠버네티스 패키지 매니저
  • 쿠버네티스용 소프트웨어를 검색하거나, 공유하고 사용하기 위함
  • 쿠버네티스 애플리케이션을 패키지 형태로 손쉽게 관리할 수 있도록 도와주는 도구다
  • 쿠버네티스와는 별개의 프로젝트이다

  • 현재는 v3버전이고 v2버전에서만 tiller를 지원한다
    -> tiller를 사용하여 api-server에 도달하면 보안에 위험이 있기 때문이다
  • v3버전에서는 tiller가 없고 client가 바로 api-server에 도달한다. 이때 config파일의 인증서로 인증을 한다.

📒 헬름 사이트 참조
📒 헬름 공식 문서

헬름 설치하기

  • 헬름 패키지를 설치하기 위해서는 헬름 명령어가 필요하다
    = 헬름 클라이언트가 필요하다

📒 헬름 설치 참조

  • 바이너리 릴리스로 설치

1 . linux-amd64 링크 주소 복사 후 설치

wget https://get.helm.sh/helm-v3.11.1-linux-amd64.tar.gz
# wget으로 복사한 링크 설치

tar xf helm-v3.11.1-linux-amd64.tar.gz
# 압축해제 

sudo install linux-amd64/helm /usr/local/bin
# 적절한 디렉터리로 이동 
# cp로 해도 상관 x 

helm version
# 설치확인 

퀵 스타트 가이드

헬름 차트 = 패키지
차트의 버전 = 패키지의 버전
헬름 차트를 설치하고 저장하기 위해서는 헬름 저장소(repository)가 필요하다

📒 퀵 스타트 가이드

helm repo add bitnami https://charts.bitnami.com/bitnami
# repo설치, 이름은 bitnami가 아닌 원하는 이름도 지정 가능 
helm repo remove repo이름
# repo 제거

helm repo list
# 설치한 repo보기 

helm search repo bitnami
# bitnami라는 repo가 가지고 있는 차트(패키지) 목록 보기 

helm repo update
# 패키지의 목록 업데이트 

helm install mydb bitnami/mysql
# helm install release명 차트이름
# 지정한 release명으로 원하는 차트(패키지) 설치 

helm list
# 설치한 차트 목록 보기 

helm status mydb
# helm status 릴리스명
# 설치한 차트의 상태보기

helm uninstall mydb
# helm uninstall 릴리스명
# 차트 삭제 

📒 헬름 사이트는 간혹 명령어에서 영문과 한국어 번역이 다른 경우가 있기 때문에 명령어 오류가 난다면 영문으로 보도록 하자.

헬름 사용하기

helm search hub
  • 여러 저장소들에 있는 헬름 차트들을 포괄하는 헬름 허브를 검색한다.
  • 아티펙트 허브 사이트
    -> 도커 허브처럼 차트를 검색할 수 있는 사이트
    -> 다운로드는 받지 못하고 어디에서 다운받을 수 있는지 경로를 알려준다

📒 헬름 사용하기 참조

Customization

1 . 소스코드 변경으로 커스터마이즈

helm show values bitnami/mysql > mysql-param.yaml
# bitanami에 있는 mysql차트에서 values파일을 원하는 param파일로 리디렉션 

vi mysql-param.yaml
# param파일에 접속 


-> 위와 같이 service의 type을 수정

helm install mydb1 bitnami/mysql -f mysql-param.yaml
  • bitnami에서 mysql다운받을 때 위에서 작성한 param파일을
    -f 옵션을 통해 커스터마이제이션한다.
kubectl get svc    

  • bitnami/mysql 차트를 설치하면 기본적으로 생성되는 서비스의 type은 clusterip인데 커스터마이제이션을 통해 nodeport로 커스마이즈 된것을 확인

bitnami 차트 소스코드 : bitnami가 가진 모든 차트의 소스코드

  • 해당 사이트 접속 후 mysql 차트 디렉터리 들어간다.
  • mysql디렉터리에 보면 values라는 파일이 보이는데 아래와 같이 service파트가 존재한다.
  • 이것은 처음에 param파일을 만들어서 vi로 접속해 수정한 파일과 동일하다.
    -> 즉, 첫줄의 명령어인 'helm show values bitnami/mysql > mysql-param.yaml'이라는 것은 bitnami의 소스코드 사이트에서 mysql디렉터리에 있는 values라는 파일을 show(가져온다)하는 것이다. 이렇게 가져온 파일을 리디렉션을 통해 원하는 yaml파일로 재작성한 것 뿐이다.
    -> values파일을 원하는 파일로 리디렉션 시킨 후 vi로 접속해 커스터마이즈 후 install할때 -f 옵션으로 커스터마이즈한 파일을 껴넣는다.

2 . 원하는 값만 커스터마이즈

vi my-param.yaml # 원하는 yaml형식 파일 생성 후 접속

primary:
  service:
    type: LoadBalancer
# 원하는 값만 커스터마이즈 

helm install mydb bitnami/mysql -f my-param.yaml
  • bitnami/mysql을 설치할때 -f옵션으로 원하는 값만 커스터마이즈한 파일을 껴넣는다
kubectl get svc


-> 기본값인 clusterip에서 커스터마이즈한 값인 LoadBalancer로 바뀐 것을 확인

3 . 버전관리 및 롤백

helm upgrade mydb bitnami/mysql -f my-param.yaml

  • 기존의 mydb에 upgrade를 사용해서 -f 옵션으로 원하는 커스터마이즈 파일을 껴넣는다.
  • 리스트로 확인하면 revision(버전)이 2가 된것을 확인
helm history mydb

  • history를 보면 두가지 버전이 존재하는 것을 확인
kubectl get svc 
  • 두번째 버전의 서비스를 보게되면 커스터마이즈한 값으로 svc type이 바뀐것을 확인
helm rollback mydb 1	

kubectl get svc
  • 서비스 타입을 보게되면 다시 원래 버전1의 타입으로 바뀐 것을 확인

Kubernetes-dashboard

helm repo add dashboard https://kubernetes.github.io/dashboard	
  • 아티펙트 허브 사이트에 들어가 kubernetes-dashboard를 검색하면 어떤 repo가 필요한지, 해당 repo의 링크를 얻을 수 있다.
  • dashboard라는 이름으로 다운로드
helm repo update
#dashboard repo가 가지는 차트 목록 업데이트

helm search repo dashboard
#dashboard의 차트 목록 검색
  • kubernetes-dashboard라는 차트 확인
helm show values dashboard/kubernetes-dashboard > my.yaml
  • dashboard의 kubernetes-dashboard의 소스코드 디렉터리에서 values 파일을 show해서 새로운 yaml파일에 넣는다.
vi my.yaml # 새로운 yaml파일 접속 및 아래와 같이 수정


-> 서비스의 타입을 로드밸런서로 지정했으므로 외부에 노출이된다.
-> 외부용ip를 통해서 외부에서 접속이 가능하다.

helm install mydash dashboard/kubernetes-dashboard -n kube-system -f my.yaml
# 커스텀한 파일을 -f 옵션으로 껴넣어서 mydash 차트를 설치
  • kube-system 네임스페이스에 설치한다.
helm ls -n kube-system # 생성한 차트 확인
kubectl get svc -n kube-system # 커스텀한 서비스 타입이 적용되어있는지 확인 

kubectl get sa -n kube-system


-> mydash 차트를 생성하면서 자동을 생성된 서비스 계정을 확인

kubectl create token -n kube-system mydash-kubernetes-dashboard
  • 해당 서비스 계정에 대한 토큰을 생성한다.

브라우저에 로드밸런서의 외부용 ip https://192.168.56.200 입력 후 생성한 토큰으로 로그인

  • 토큰은 보안에 의해 일정시간이 지나면 만료되어 자동으로 로그아웃된다. 따라서 계속해서 해당 서비스 계정에 대한 토큰을 생성하여 로그인을 해야한다.
  • 하지만 실제로 접속해보면 아무것도 뜨지 않고, 에러 알림이 뜨는 것을 확인할 수 있다.
  • 파드로 웹을 띄우고 있고, 파드에 서비스계정이 존재한다. 하지만 서비스 계정에 바인드 되어있는 롤이나 클러스터롤이 존재하지 않아 권한이 없어서 그런것이다.
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
subjects:
- kind: ServiceAccount
  name: mydash-kubernetes-dashboard
  namespace: kube-system
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: cluster-admin # 기본으로 존재하는 4가지 클러스터롤 중 가장 강력한 권한을 가진 클러스터롤
  apiGroup: "rbac.authorization.k8s.io"

-> 클러스터롤 바인딩으로 서비스계정에 가장 강력한 권한을 가진 클러스터롤을 바인딩 했더니 쿠버네티스-대시보드 브라우저가 정상적으로 작동되는것을 확인
-> 이번 실습은 실습용으로 외부에서 확인하기 위해 로드밸런서로 외부에 노출시킨것이지, 사실 쿠버네티스-대시보드와 같은 모니터링 시스템은 외부로 절대 노출시키면 안된다.

Prometheus

  • 기본적으로 HPA mertics에서 모니터링하는 지표인 CPU/memory는 metrics-server를 이용한다.
  • 일반적인 모니터링에는 프로메테우스 Operator를 이용한다.

  • TSDB : 시계열 데이터베이스 , 시간에 따라 변화하는 시계열 데이터를 저장한다.
  • Service Discovery : kubernetes api-server에서 클러스터에 파드가 몇개있는지, 디플로이먼트가 몇개있는지 등의 정보를 얻는다.
  • HTTP server라는 자체적인 네트워크 서버가 있다
  • Grafana : 데이터 시각화 도구, promQL을 통해 TSDB에서 시계열 데이터를 쿼리해서 가져와 시각화 한다.
    -> Grafana는 프로메테우스에서 만든 도구는 아니지만 실제로 프로메테우스와 한쌍으로 사용된다.
  • promQL : TSDB에서 시계열 데이터를 가져오기 위해 개발한 쿼리언어, SQL과 같은 쿼리언어이다.

📗 프로메테우스는 쿠버네티스로 인해 유명해졌고, 쿠버네티스의 모니터링에 거의 표준적으로 사용되지만, 쿠버네티스 이외에도 프로메테우스가 모니터링 할 수 있는 서비스들은 많다.

📗 프로메테우스 공식 사이트

프로메테우스 설치 및 접속

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  • 아티펙트 허브에서 프로메테우스 검색 후 필요한 repo가 무엇인지, repo의 다운로드 링크를 얻을 수 있다.

https://github.com/prometheus-community/helm-charts

  • 위 사이트 접속해서 charts 이동
  • kube-prometheus-stack 이동
  • values.yaml 파일이 존재하는 것을 확인
grafana:
  service:
    type: LoadBalancer # 외부에 노출시키기 위한 용도 

-> 원하는 타입만 커스터마이즈한 yaml파일 생성
-> 실습용으로 외부에 노출시켜 확인하기 위해 로드밸런서를 선택했지만 실무에서는 이러한 모니터링 시스템을 절대 노출시키면 안된다

helm install prometheus prometheus-community/kube-prometheus-stack -n monitor -f prometheus-grafana.yaml

-> 커스터마이즈 한 yaml파일을 껴넣어서 차트 설치

kubectl get svc -n monitor 
# 커스텀한 서비스의 타입이 적용되었는지 확인
# 로드밸런서의 외부용 ip확인 

브라우저에 로드밸런서 외부용 ip http://192.168.56.201 입력 후 grafana에 접속

id / pw : admin / prom-operator
# id/pw 입력 후 로그인 

로깅

  • 여러 노드가 있고, 각 노드에는 여러 컨테이너가 존재하는 파드들이 여러개가 있다. 여러 컨테이너의 로그들은 파드의 로그를 수집하는 /var/log/pod에 수집된다.
  • 문제는 파드가 매우 많다면 일일이 로그를 수집할 수 없다.
    따라서 아래의 세가지 방법으로 각 노드에 있는 파드들의 로그들을 자동으로 수집하여 한곳으로 모으고 시각화 및 검색기능을 구현할 수 있다.

ELK Stack

  • Elasticsearch
    • 검색엔진
  • Logstash
    • 로그 수집기
    • 비교적 무겁다 -> Fluentd로 대체
  • Kibana
    • 데이터 시각화

EFK Stack

  • Elasticsearch
  • Fluentd
    • 로그 수집기 (+ 가공 ,필터 기능)
    • FluentBit (Fluentd의 가공, 필터기능을 줄여 경량화)
  • Kibana

Elastic Stack (가장 선호함)

  • Elasticsearch
  • Beats
    • 로그 수집기
    • Fluentd에서 더 경량화 한 것
  • Kibana

📕 EFK실습

  • EFK 실습은 해당 링크를 참고하면 된다.
profile
성실하게 열심히!

0개의 댓글