Kubernetes Basic 4 : Troubleshooting

Trouble Shooting Kubernetes 클러스터에 문제가 생겼을 때 원인을 찾고 문제를 해결할 방법을 찾는 방법에 대한 항목입니다. Log 클러스터에 문제가 생겼을 때는 로그를 봐야합니다. 공식 문서에도 나와있듯, Kubernetes 구성 요소들의 로그가 저장되어 있는 위치는 정해져 있습니다. Kubelet Kubelet은 모든 노드에서 실행되는 요소로써, Kubernetes를 통해 같은 노드에 생성된 모든 컨테이너들을 관리합니다. Yaml 혹은 Json 파일로 작성된 Pod spec을 해석해 Pod를 생성하는 것도 Kubelet의 몫입니다. Kubernetes가 systemd를 사용하는 경우...

더보기

Kubernetes Basic 3 : Application Operator

Application Operator Kubernetes가 지원하는 기능 중 하나는 CustomResource라는 사용자 지정 객체를 만들 수 있다는 점입니다. CustomResource들을 Kubernetes 객체로 해석하고 지속적으로 모니터링하는 Kubernetes Operator 또한 지원합니다. CustomResourceDefinition으로 CustomResource가 어떤 것인지 지정할 수 있고, Kubernetes operator는 이를 참고하여 CustomResource를 Kubernetes 객체로 해석해서 생성합니다. 여러 어플리케이션 개발사들은 이를 이용해서 어플리케이션을 Kubernetes ...

더보기

Kubernetes Basic 2 : Kubernetes 객체

Kubernetes 객체 이 포스트에서는 Kubernetes 기본 객체들을 간단하게 소개합니다. 더 상세한 정보는 Kubernetes 공식 문서 : Concept에서 제공하고 있습니다. Pod Kubernetes의 가장 기본적인 워크로드입니다. Application이 Pod 형태로 Kubernetes 클러스터에 배포됩니다. Pod는 다음과 같은 특징들을 가집니다. Pod는 하나 이상의 컨테이너로 구성되어 있습니다. Pod는 컨테이너 수와 상관없이 하나의 IP를 가집니다. Kubernetes는 Pod가 오류로 인해 실패하면, 자동으로 Pod를 재생성합니다. Pod는 영속성이 보장되지 않습니다...

더보기

Kubernetes Basic 2-1 : Statefulset vs Deployment

StatefulSet vs Deployment Pod 집합을 배포할 때 Deployment와 StatefulSet은 구분하기 까다로울수 있습니다. 둘 다 여러 개의 Pod를 배포한다는 공통점이 있는 반면, 차이점이 무엇인지는 와닿지 않기 때문입니다. 이 둘을 구분하는 대표적인 차이점 중 하나는 StatefulSet은 Deployment와 달리 각 Pod의 고유성을 보장한다는 것입니다. 어떤 것인지 살펴봅시다. Pod의 이름 Deployment로 배포하면 각 Pod의 이름은 랜덤으로 결정됩니다. NAME READY STATUS RESTARTS...

더보기

Kubernetes Basic 1 : Kubernetes 조작 방법

Kubernetes 조작 Kubernetes 클러스터가 구성된 상태에서, Kubernetes를 조작하기 위해서는 다음 두 가지가 필요합니다. 구성된 클러스터의 인증 파일이 먼저 로컬에 갖춰져 있어야 합니다. 모든 쿠버네티스 조작은 기본적으로 kubectl이라는 제어 도구를 사용해서 조작합니다. kubectl이 설치되어 있어야 합니다. Kube config kube config Kubernetes는 기본적으로 ~/.kube/config 파일을 참조하여 클러스터를 조작합니다. 따라서, 클러스터를 조작할 로컬 환경(대부분의 경우 노트북이나 맥북이 될 것입니다.)내 다음과 같은 ~/.kube/confi...

더보기

Kubernetes Basic 0 : Kubernetes 구성 도구

Intro Kubernetes Basic 포스트 시리즈는 Kubernetes/Infra에서 필요한 가장 기본적인 개념들만 간략하게 소개합니다. 실제로는 더 많은 내용들이 있고, 여기에 소개된 것은 극히 일부임을 밝힙니다. 이 문서의 목적은 복잡한 의사 결정을 최대한 줄이고 빠르게 Kubernetes를 사용하고 또 필요한 개념들을 소개하는데 있습니다. 더 상세한 내용은 인터넷에 공개된 공식 문서 혹은 각 개념에 대해 자세히 설명한 글들을 참조하는 것이 좋고, 이 시리즈에서도 그러한 글들의 주소들을 첨부하고 있습니다. Kubernetes Cluster 구성 이 챕터에서는 Kubernetes 클러스터를 맨 처음 구...

더보기

Etcd health check 문제

etcd etcd는 Go 언어 기반 분산 시스템 키-값 저장소이다. Kubernetes는 etcd에 작업 스케줄링과 서비스 검색을 위한 클러스터 설정값을 저장한다. Kubernetes의 kube-apiserver는 etcd가 살아있는지 주기적으로 health check을 날린다. etcd가 죽거나 문제가 생기면 health check가 실패하고, 그러면 kube-apiserver 또한 꺼지게 된다. kube-apiserver에 문제가 생기면 kubernetes를 제어할 수 없다. 이 말은 kubectl 명령어도 안먹고, apiserver에 직접 접근하는 것도 불가능하다는 이야기다. 오늘은 etcd의 성능 문제로 ...

더보기

Airflow가 Metadata DB를 사용하는 방법

Airflow Airflow는 Apache 오픈 소스 그룹에서 관리하는 대형 오픈소스 프로젝트이다. Airflow는 작업 스케줄링 도구로, 주기적인 작업의 일정을 정의하고 그 실행 결과를 모니터링 해준다. Airflow는 Metadata DB에 Airflow의 설정, 연결, 그리고 DAG 실행 결과등 여러가지 Airflow의 메타데이터를 저장한다. Metadata DB로 Postgresql이나 Mysql 같은 관계형 데이터베이스를 사용한다. Airflow는 Python으로 작성되었다. 따라서 Metadata DB를 어떻게 조작하는지 보면, 앞으로 Python에서 데이터베이스를 조작할 때 참고가 될 수 있을 것 같...

더보기