Search
Duplicate

2주차 - 로컬 쿠버네티스 + 로그 관리

로컬 쿠버네티스 테스트

1.
docker registry 구축
docker image registry를 기반으로 image pull → pod로 생성을 테스트해야하기 때문에 초반에 로컬에 harbor를 설치
참조링크 :
1. `wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz` 2. tar -xvzf harbor-offline-installer-v2.4.1.tgz 3. cp harbor.yml.tmpl harbor.yml 4. vi /etc/hosts 명령어를 통해 원하는 hostname을 등록 5. harbor.yml 편집 6. sudo ./install.sh
JavaScript
복사
위와 같은 식으로 설치
2.
클러스터 환경 구축
로컬에서도 클러스터 환경을 구축해서 특정 노드에 배포가 가능한지, 여러 노드에 가용 리소스 별로 골고루 배치하는지 등의 실제 운영환경과 비슷한 테스트를 하기위해 클러스터 구축 필요
처음에는 minikube를 사용
→ 재부팅하면서 데이터를 날리는현상이 존재해서 k3d로 갈아탐
k3d를 이용
- k3d cluster create “클러스터명” - k3d node create “노드명” -c “클러스터명” 을 하면 설치완료
JavaScript
복사
3.
로컬에서 배포 및 관리
커맨드라인에서 명령을 해서 파일 기반으로 테스트를 해도 가능은 하나, 그냥 yaml 파일을 복사해서 바로 배포하고 싶고, ui에서 서비스 삭제를 하고싶을 수도 있음
→ kubernetes dashboad를 이용
k3d 기반 kubernetes dashboard 설치 링크
위와 같은 환경에서 사용가능

로그 관리

실제 운영을 할것이기 때문에 로그 관리도 필수적으로 필요하다.
어떤 환경으로 구축할지 고민끝에 EFK를 썼다.
elk를 사용하지 않은이유는 logstash가 fluentd 보다 성능이 떨어진다는 글을 보았기 때문
완벽히 좋다 라고 판단하는 근거는 없으나 일단 토이 프로젝트이기 때문에 새로운걸 선택
위와 같은 구조로 동작하게 진행
apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch namespace: elastic labels: app: elasticsearch spec: replicas: 1 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: elastic/elasticsearch:6.4.0 ... --- apiVersion: v1 kind: Service metadata: labels: app: elasticsearch name: elasticsearch-svc namespace: elastic spec: ports: - name: elasticsearch-rest ...
JavaScript
복사
위와 같은 elastic search의 yaml파일을 제작
apiVersion: apps/v1 kind: Deployment metadata: name: kibana namespace: elastic labels: app: kibana spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: ... --- apiVersion: v1 kind: Service metadata: labels: app: kibana name: kibana-svc namespace: elastic spec: ports: ...
JavaScript
복사
--- apiVersion: v1 kind: ServiceAccount metadata: name: fluentd namespace: elastic --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: fluentd rules: - apiGroups: - "" resources: - pods - namespaces verbs: - get - list - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd roleRef: kind: ClusterRole name: fluentd apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount name: fluentd namespace: elastic --- apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd namespace: elastic labels: k8s-app: fluentd-logging version: v1 spec: selector: matchLabels: k8s-app: fluentd-logging version: v1 template: metadata: labels: k8s-app: fluentd-logging version: v1 spec: serviceAccount: fluentd serviceAccountName: fluentd tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: fluentd image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch env: - name: FLUENT_ELASTICSEARCH_HOST value: "elasticsearch-svc" - name: FLUENT_ELASTICSEARCH_PORT ...
JavaScript
복사
또한 kibana와 fluentd에 대한 yaml파일을 제작 및 배포
fluentd배포할 시 유의사항으로, 모든 노드에 대한 로그를 수집해야하기 때문에 모든 노드에 fluentd를 배포
위와 같은 형태로 로그가 쌓이는 것을 확인가능
→ 실제로 카프카에 쌓는 데이터를 로깅에 추가했을때 해당 데이터를 키바나에서 확인할 수 있었으나 캡처하진 않음