전체 글 122

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..

05. Kube 교육 - YAML 기본 문법

실습 기존 실행 중인 Deploy, POD를 YAML File 형태로 Export 하세요. k neat 사용해 보세요 YAML 파일 이용하여 Busybox Deploy 배포 하세요. Why YAML? Kubernetes 에서는 모든 Object(pod, service, ConfigMap 등)가 Code로 관리 됩니다. 이 Code는 YAML File 형식으로 apply(적용), Export(추출) 가능합니다. 기존에는 System Engineer가 명령어로 Application 설치하고 네트워크/스토리지 연결 하였다면 Kube 환경에서는 그 모든 행위를 YAML File, 코드로 수행합니다. 따라서 YAML(YAML 문법이겠죠)에 반드시 익숙해 져야 합니다. (system engineer 된 후 code..

04. Kube 교육 - Kube tool 이용(kctx, kns, kps, kubetail, k neat)

실습 kubeps, kubectx, kubens을 이용한 Cluster, Namespace 변경 k neat 통한 YAML file export kube tail 통한 멀티 pod 로그 동시 조회 Why kube tools 시간이 가장 소중한 자원이라 엔지니어는 항상 시간을 줄일 수 있는 도구를 찾아야 한다고 생각합니다. 아마 우리가 하는 일의 대부분은 예전에도 하였고 다음에도 할 일입니다. (니체의 영원회귀는 참 맞는 말입니다.) 귀챠니즘이 가장 큰 적인데 매번 작업 시 다음에 어떻게 더 빠르게 할 수 있을까 생각하며 조금이라도 더 생각하는 게 퇴근 시간을 앞당길 수 있는 길이라 생각합니다. Kube는 태생 자체가 여러 툴들의 조합이고 그걸 또 편하게 integration 할 수 있게 API 서버를 사..

03. Kube 교육 - PC 환경 설정

실습 VS Code 들여쓰기/주석처리 단축키, Compare File 기능 등 WSL + Window Terminal 가로/세로 화면 분할 단축키 Kubectl 명령어 Alias 설정 Why PC 환경 설정 아마 대부분의 운영자 분들이 이미 잘하고 계시겠지만 일부 운영자들은 아직 Kube 작업을 기존 VM처럼 서버에 직접 접속해서 Kubectl 명령어를 내립니다. Kube는 모든 작업이 API Server 통신이라 자기 PC에서 원격 클러스터 제어가 가능합니다. (Ansible도 동일하죠. 서버 관련 모든 작업을 자기 PC에서 수행합니다.) 물론 각 사용자 별 적절한 권한 설정은 필요합니다. 따라서 작업을 빠르게 수행하기 위해서 개인 PC 세팅을 최적화하는 것이 중요합니다. 의외로 운영자 분들 중 아직도..

02. Kube 교육 - k3s, kubespray 설치

실습 k3s 설치 kubespray 설치 로컬 PC 원격 k3s, kubespray cluster 등록 Why 나작클 설치는 k3s, kubespray, kubeadm, minikube 등 본인이 편한 툴을 사용하시면 됩니다. 저는 ansible이 익숙해서 kubespray로 진행 하였습니다. 중요한 건 나만의 작은 클라우드(또는 클러스터, 나작클)가 있는 것 입니다. 언제든지 편하게 뭉개고 다시 만들 수 있고 여러 테스트를 다른 사람 눈치 보지 않고 집에서건 카페에서건 사용 할 수 있는 클러스터가 필요합니다. Kube는 복잡한 놈이라 여러 명령어를 클러스터 에러 또는 삭제 부담없이 편하게 해 보셔야 알 수 있는 놈입니다. 없으시면 회사에 요청해서라도 꼭 만드시길 바랍니다. 요즈음 메모리 가격이 낮아져서..