role
role-binding
clusterrole
clusterrole-bindding
kubectl get clusterrole | grep -v ^system
### k8s가 내부적으로 사용하는것들은 system으로시작하니까 빼고 검색
cluster-admin은 거의 모든 권한이 있는 우리가 지금 사용하고 있는것임
role은 이미 view가 있기 때문에
rolebinding만 해주면 됨
vi
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: myuser-view-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: myuser
kubectl config get-contexts
kubectl config use-context myuser@cluster.local
clusterrole이기 때문에 특정 Namespace에 종속되어있지않음
kubectl auth can-i create pod
kubectl auth can-i get nodes
### 이런식으로 권한을 물어볼 수 있다.
kubectl config use-context kubernetes-admin@cluster.local
내가 어디서 무얼 하고있는지 헷갈릴 때 사용할만한 팁이 있다.
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
vi ~/.zshrc
exec zsh
y
n
n
rainbow
unicode
24시간
dotte
full
light
compact
fluent
yes
1
y
pi10l configure
kubectl
이렇게 하면 내가 사용하고있는 context가 나온다.
거의 정석적으로 이렇게 사용함..
window powershell에서 사용하면 bash나 zsh이 호환이 안될 때가 있음 그래서 원격으로 리눅스에서 돌리기도 한다고 함..
https://github.com/ahmetb/kubectx
이것도 개인이 만들었지만 많이들 사용함
wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubectx
wget https://github.com/ahmetb/kubectx/releases/download/v0.9.4/kubens
mv나 심볼릭링크를 걸어줘도 된다.
자동으로 실행권한도 부여하게된다.
지금까지는 거의 default에서만 작업했지만 실제로는 ns를 여러번 전환하게된다.
https://helm.sh/
패키지 관리자는 늘 있어왔다.
k8s전용 패키지 관리자가 이 HELM이다.
이렇게 11개의 리소스가 필요하다.
yaml파일이 11개가 필요할것이고
kubectl apply -f .
이런식으로 진행이 될텐데..
이런것들을 모아서 Package로 관리하자..
이게 쿠버네티스의 Package이다..
https://miro.medium.com/max/1200/1*mClrYLFakC6B6f62vVnhcA.png
이 아키텍처는 사용하지 않는 아키텍처이긴하다..
하지만 알고 있어야한다고하심..
일단 HELM 2버전과 3버전이 있다. 3년정도 되었는데
아직도 대부분 2버전으로 되어있기는 하다. 그렇지만 2버전은 Tiler라는 권한이 막강한 구조가 외부에 노출되어있다는 큰 단점이 있어서 이제 잘 사용하지 않는다.
우리는 3버전만 사용하면 됨..
위 그림은 2버전의 아키텍처이다.
용어
이건 설치할 필요가 없다.
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
vi ~/.zshrc
exec zsh
### helm 플러그인 추가
https://artifacthub.io/
저장소는 아니고
HELM차트를 검색하는 사이트이다.
이런것들이 그나마 좀 검증되었음
https://github.com/bitnami/charts
이게 차트의 구조이고 이건 정해져있다.
<Chart Name>/
Chart.yaml
values.yaml
templates/
Chart.yaml: 차트의 메타데이터
values.yaml: 패키지를 커스터마이징(value)
templates: YAML 오브젝트 파일
https://github.com/bitnami/charts/tree/master/bitnami/wordpress
여기를 자세히 보면 차트 구조를 어느정도 파악해볼 수 있다.
https://helm.sh/docs/intro/using_helm/
사전요구사항
helm repo add bitnami https://charts.bitnami.com/bitnami
이렇게 이름은 중요하지는 않다.
레포지토리 주소가 중요하지
helm search repo bitnami wordpress
helm search repo wordpress
helm install mywordpress bitnami/wordpress
어떻게 등록하느냐에 따라서 패키지 이름이 달라짐
커스터마이징하는 방법에 대해서 잘 나와있다.
create하면 기본 뼈대가 만들어지고 직접 수정할 수가 있고
helm package mypkg하면
이렇게 내부적으로만 접근할 수 있게 하는것도 방법이다
직접 패키지를 만드는거 레지스트리를 운영하는거 정도가 이후에 해볼만한 내용이다..
Manifest란
object를 정의하는 yaml파일이라고 함
https://github.com/kubernetes-sigs/metrics-server
helm을 이용해서 로그나 모니터링을 할 예정
https://soundcloud.com/
프로메테우스가 원래 사용되었던 서비스가 soundcloud였는데 오픈소스로 공개했다고 한다.
쿠버네티스만을 위한 구성은 아니고 다양한 환경에서 사용될 수 있다.
https://prometheus.io/docs/introduction/overview/
프로메테우스의 구성요소를 확인할 수 있는 아키텍처임
TSDB는 Time Series DB
시계열 DB
관계형 데이터베이스가 아니라 시간축에 대한 값으로 정리해놓은 것이 시계열 DB라고 한다.
Grafana는 데이터 시각화 도구임
이걸 헬름으로.. 간편하게 해볼 예정
https://artifacthub.io/packages/helm/prometheus-community/prometheus
https://github.com/prometheus-community/helm-charts/
이렇게해서 나만의 리소스를 만들 수 있다고 한다..
등등.. operator로 만들게된다..
설치는 간단함..
grafana:
service:
type: LoadBalancer
에러..
패키지가 이게 아니었음..
이건 프로메테우스만 설치한거임
helm install prom prometheus-community/kube-prometheus-stack -f prom-values.yaml -n monitor
그라파나만 다루는 책이나 강의도 있음..
admin
prom-operator
이런식으로 cpu와 memory를 좀 확보하고
설치먼저합시다
EFK Logging
Elasticsearch
Fluent Bit
https://artifacthub.io/packages/helm/elastic/elasticsearch
elasticsearch와 kibana를 설치할 예정
vi value.yaml
helm install elastic elastic/elasticsearch -f es-value.yaml -n logging
https://github.com/fluent/fluent-bit-kubernetes-logging
git clone https://github.com/fluent/fluent-bit-kubernetes-logging.git
vi
helm install kibana elastic/kibana -f kibana-value.yaml -n logging
오 이거 helm패키지만들면 유명해질 수 있음...??,,,
fluent-bit이 배포가 안되고있다..
다시..
sa를 만들고 role과 rolebinding을 만들어주어야함
데몬셋을 지웠다가
다시만듦
kubectl port-forward -n logging elasticsearch-master-0 9200:9200
터미널을 하나 더 열고
You Know, for Search가 나와야 정상 설치가 된것임
이런 로그들을 fluent bit이 수집해준다.
그리고 전송을 해준다 누구한테?
Elastic search에게..
Elastic search는 검색엔진이다.
여기서는 log를 위해 사용하지만 기본적으로는 검색엔진서비스임
그리고 이거를 kibana로 시각화하는 구성임
ELK Elasticsearch + Logstash + Kibana
전부 자바로 만들어져있고 Elastic 이라는 회사에서 만들어졌음
EFK Elasticsearch + fluentd(Ruby로 만들어진 opensource) + Kibana
Elasticsearch + Fruent Bit(아주 가벼움) + Kibana
Elastic Stack
쿠버네티스에서는 굳이 필터링하고 가공할 필요가 없음..
Elastic Stack Elasticsearch + Beat + Kibana
다양한 조합이 가능하다.
https://github.com/elastic/elasticsearch
코드가 다 공개되어있지만 opensource는 아니다 코드가 공개된것과 상관없이 라이센스가 중요하다.
이렇게 이중 라이센스를..
오픈소스를 가져다가 돈을 벌어도 아무 문제가 없가..
https://www.olis.or.kr/license/compareGuide.do
https://tech.kakao.com/2021/09/08/opensource-license/
오픈소스라고해서 모두 같은 라이센스를 사용하지는 않다
지금 fluent bit이 수집을 못하고 있다고 한다..
이름이 이렇게되어서 이름을 잘 수정해주어야함
kibana가 elasticsearch를 바라보고 있는데, ES에 스토리지가 있을것이다 이 스토리지에서 가지고 와야하는데 어떤 데이터를 가지고 올것인가에 대한 설정을 하고있다.
이렇게 하고 Create index pattern을 누름
Pod가 제거되더라도 로그는 계속 이친구가 저장하게된다.
여기까지.....
다음주에는 EKS를 배울 예정
깃도 공부할 예정
젠킨스가지고 CICD
코드를 올리면 바로 Pod로 만들어지도록 해준다고 하심..
오프라인 수업 안내.. 7월 4일부터임.. 지연될 수 있음..
멘토링도 진행되고 있었을꺼고..
원래는 서초 엔코아 본사였는데 엔코아 본사가 이사를 하면서..
위치가 1호선 독산역이라고 하심..
플레이데이터 지베리센터..