Kubernetes 56

16. Kube 교육 - Grafana Custom 대시보드 생성

실습 Prometheus-stack Helm Chart Built-in + Grafana 공식 홈페이지 모니터링 대시보드 Import 기존 대시보드 nginx active connections graph(panel) 추가 모니터링 Dashboard 이슈 사항 클러스터 운영을 위해서 시스템 운영 현황 대시보드는 필수적입니다. 문제는 모니터링 해야 할 Metric이 너무 많아 선택이 어렵다는 것 입니다. 그리고 신규 Grafana 기반으로 새로운 모니터링 대쉬보드 만들기가 쉽지는 않습니다. 운영에 반드시 필수적인 부문이지만 저도 경험이 많지 않아 자세한 일사이트를 나누기는 어렵습니다. 다만, 간단히 사용 가능하도록 기존 다른 사람들이 잘 만든 대시보드를 Import 하는 방법과 서로 다른 대시보드에서 내가 ..

15. Kube 교육 - Prometheus Stack 설치

실습 prometheus-stack 설치 grafana 기본 모니터링 페이지 확인 Why Prometheus? Kube 환경에서는 Prometheus가 모니터링 표준 입니다. (이미 2018년 CNCF Graduated, Kubernetes 이 후 2번째 CNCF 졸업 Project 입니다.) 다른 툴 비교하지 마시고 그냥 사용하시면 됩니다. ^^ 예산이 있다면 상용 툴 사용하는 것도 나쁘지 않습니다. 모니터링은 정말 Custom 영역이 많이 들어가는 부문이라 각 회사 상황에 따라 시간과 노력이 많이 필요 합니다. 운영 하면서 당연히 끊임없이 개선이 필요한 부문이죠. 그 광활한 부문 중 이번 포스팅에서는 설치 방법과 모니터링 페이지 확인까지 다루겠습니다. Prometheus-stack 설치 다른 모든 a..

11. Kube 교육 - OpenEBS LocalPV

실습 OpenEBS 설치, 호스트 노드 마운트 포인트 변경 POD Volume 할당 : OpenEBS LocalPV Storage Class 이용 Why OpenEBS? kube 환경에서 PV 스토리지를 사용하려면 상용 외장 스토리지 또는 사용이 쉽지 않은 오픈소스 Ceph/Gluster 등을 이용해야 합니다. 이에 비하여 OpenEBS Local PV는 무료 오픈소스로 사용이 편리하고 성능이 뛰어난 것이 장점 입니다. OpenEBS는 POD가 실행되는 노드의 Local Disk를 POD의 PV로 할당합니다. 단점은 Storage 용량 Quota가 지정되지 않고 Snapshot 기능을 지원하지 않는 것 입니다. 단순한 구성으로 (DAS) 장애 처리가 용이하고 성능이 뛰어나(NVMMe Disk를 사용하면 ..

09. Kube 교육 - MetalLB

실습 MetalLB 설치 및 부하 분산 확인 MetalLB HA 및 부하 테스트 Why MetalLB 예산 및 부하 등을 고려하여 특정 서비스는 외부 서비스 오픈 시 LoadBalancing을 위한 물리 L4 스위치를 사용하지 못할 수 있습니다. 또한 NGINX 등의 Web 서버는 고객 대상 80, 443 well-known port를 사용해야 하므로 NodePort type Service를 사용하지 못하는 경우가 많습니다. 이경우 open source로 사용 가능한 LoadBalancer, MetalLB를 사용 가능합니다. MetalLB 설치 설치는 다른 Kube Application과 마찬가지로 아주 간단합니다. 설치 관련 공식 홈페이지 https://metallb.universe.tf/install..

08. Kube 교육 - NodePort, LoadBalancer

실습 Nodeport 사용하여 외부에서 POD 접속해 보세요 : nodeport 를 특정 Port로 지정해 보세요. MetalLB 설치 LoadBalancer 사용하여 POD 접속하기 LoadBalancer IP를 특정 IP로 할당하고 동일 IP로 2개의 Protocol(TCP, UDP)를 할당해 보세요 Why NodePort, LoadBalancer? NGINX 웹 서버를 설치하고 나면 당연히 내 PC에서 웹 서버로 정상적으로 접속이 되는지 검증하고 싶습니다. 하지만 Kube POD는 노드 안에서 실행되는 거라 노드 안에 있는 POD를 외부에서 바로 접속할 수 있는 방법이 없습니다. (D-NAT 등의 추가 네트워크 설정이 필요합니다.) 노드의 IP와 POD의 IP는 서로 다른 대역이라 다이렉트 통신이 ..

07. Kube 교육 - Service Discovery

실습 NGINX Service를 생성해 보세요. Service 적용 후 Endpoint가 제대로 생성되었는지 확인해 보세요. 기존 POD를 Delete 후 Service 연결을 검증해 보세요. 복수의 POD를 실행하여 POD Load Balancing 기능을 검증해 보세요. Why Service Discovery Kube는 기본 철학(?)이 POD는 항상 죽을 수 있다 입니다. 기존 POD가 죽고 나서 새로 생성되는 POD는 IP, Hostname 등 환경 정보가 기존 POD와 다릅니다. (재시작이 아니라 새로운 POD가 생성입니다.) 이 때 POD 간 통신이 IP 기반이라면 Client 단에서 일일이 새로운 IP를 추가해야 하므로 관리가 불가능합니다. 그리고 기존 POD를 이중화하여 새로운 POD가 추..

14. Kube 교육 - Readiness/Liveness Probe

실습 Kafka Bitnami Helm Chart 실행하여 사용 중인 Probe 확인 Why Readiness, Liveness Probe? Application이 아직 Traffic을 받을 준비가 안되어 있는 경우, 예를 들어 Tomcat에서 DB 연결이 제대로 안되면 Process는 실행 중이라도 정상적으로 Traffic 처리를 하지 못 합니다. 이 경우 Tomcat을 Traffic이 받지 못하도록 설정이 필요합니다. 이러한 기능을 Readiness(준비 여부 정도 번역) Probe가 담당합니다. Readiness Probe에서 정상 여부를 확인하여 정상적이지 못하다고 판단되면 Service에서 제외 합니다. 비슷한 사례로 readiness probe 설정이 없다면 nginx restart 시 잠깐이..

13. Kube 교육 - Label & Affinity

실습 label 이용 NGINX service, pod 연결 동일 노드에 MySQL Application 동시에 실행되지 않도록 설정(advanced scheduling) Why Label & Affinity Kube 환경은 Object 중 특정 Object(예: 여러 NGINX POD 중 특정 NGINX POD)만 선택을 해야하는 경우가 많습니다. 예를 들어 Service에서 특정 POD를 선택하고 여러 노드 중 GPU 노드에서만 특정 POD를 실행해야 하는 경우가 대표적입니다. 이러한 경우 사용자가 임의로 지정한 Label(상표 정도로 번역) 기준으로 선택합니다. 예를 들어 POD에 app=nginx, app=tomcat 등으로 label을 지정하고 해당 label 기준으로 다른 Object에서 해당..

12. Kube 교육 - ConfigMap

실습 Application 설정 파일(nginx.conf) ConfigMap 사용 : ConfigMap subpath 이용 NGINX 설정 파일 변경 후 POD 적용 Why ConfigMap? Kube 환경에서 Application 설정 파일(nginx.conf)을 별도로 관리하지 않고 이미지 안에 같이 저장하면 향후 관리가 어렵습니다. 설정 파일 내용을 확인하기 위하여 POD 접속해야 하고 설정 파일만 변경 하려면 이미지를 다시 말고 재배포 해야 하는 등 부가적인 작업이 필요 합니다. 설정 파일을 ConfigMap(설정 내역 정도로 번역)으로 관리하면 별도의 Kube Object가 되어 조회(k describe cm)가 용이하고 변경 시 이미지를 다시 배포하는 것이 아니라 ConfigMap(CM이라고도..

06. Kube 교육 - Helm 이용한 Application 배포

실습 실무에서 아래의 작업을 위해 필요한 Helm 관련 내용을 정리해 보았습니다. Helm 이용하여 Redis Helm Chart를 다운로드 하세요 values.yml 수정하여 StorageClass, AuthPassword 등을 수정하세요 각 변수가 어떤 YAML 파일에 적용되는지 확인해 보세요 Helm Redis 설치해 보세요 auth.Password 변수 변경하고 Helm Chart 업데이트 하세요 물론, 위 실습을 이미 하실 수 있는 정도면 아래 생략하셔도 됩니다 ^^ Why Helm? Kube 관련 일하다 보면 YAML 파일을 참으로 많이 만들게 됩니다. 그럴 때 과연 이게 보안과 고가용성 측면에서 제대로 작성한건지 궁금할 때가 많습니다. Application이 돌아는 가는 것 같은데 이게 Be..