반응형

kubernetes 13

Pod Scheduling에 대해서 알아보자 -2 (taint&toleration, cordon&drain)

Taints & Tolerations 쿠버네티스는 클러스터의 특정 노드에 테인트를 설정할 수 있다. 테인트를 설정한 노드에는 파드들을 스케줄링하지 않는다. 테인드를 설정한 노드에 파드들을 스케줄링하려면 톨러레이션을 설정해야한다. 그럼 테인트는 톨러레아션에서 설정한 특정 파드들만 실행하고 다른 파드는 실행하지 못하게 한다. 즉, toleration이 있는 Pod는 동일한 taint가 있는 노드를 포함에 모든 노드에 배치되며, worker node는 taint가 설정된 경우 동일 값의 toleration이 있는 pod만 배치한다. $ kubectl get nodes -A NAME STATUS ROLES AGE VERSION kube-master Ready control-plane,master 24d v1.2..

Kubernetes 2022.03.03

Pod Scheduling에 대해서 알아보자 - 1 [NodeSelector, affinity&antiaffinity]

쿠버네티스에서는 파드를 어떤 노드에 실행할 것인지에 관한 다양한 옵션이 있다. 이 옵션을 조합해서 사용자가 원하는 구조대로 클러스터 안에 파드들을 배치할 수 있다. 1. NodeSelector 파드가 클러스터 안 어떤 노드에서 실행될지를 키-값 쌍으로 결정한다. 노드셀렉터는 노드의 레이블에 설정된 값으로 노드를 선택한다. 노드에 label 생성하기 $ kubectl label nodes = kube-worker 노드에 disktype=ssd 라벨을 만든다. $ kubectl label nodes kube-worker disktype=ssd $ kubectl get nodes -L disktype NAME STATUS ROLES AGE VERSION DISKTYPE kube-master Ready cont..

Kubernetes 2022.03.03

4. kubernetes architecture

kubernetes cluster는 크게 두 종류의 서버로 구성한다. 1️⃣ master (control plane): 클러스터를 관리하는 서버 2️⃣ node: 실제 컨테이너를 실행시키는 서버 master는 보통 고가용성을 만족하고자 서버 3대 정도 구성해서 운영한다. 평소 실제 클러스터를 관리하는 리더 마스터는 1대고 나머지는 대기한다. 리더 마스터에 장애가 발생하면 자연스럽게 2대 중 1대가 리더 역할을 한다. master와 노드의 구성과 통신 구조 1️⃣ master 마스터를 보면 kubelet이 마스터에 있는 도커를 관리한다. 각 컴포넌트의 중심은 kube-apiserver이다. kube-apiserver를 거쳐 다른 컴포넌트가 서로 필요한 정보를 주고 받으며, etcd에는 kube-apiser..

Kubernetes 2022.02.06

kubeconfig에 대해서 알아보자

kubectl은 기본적으로 $Home/.kube/config 파일에서 클러스터, 인증, 컨텍스트 정보를 읽어들인다. 이러한 클러스터 구성 정보를 kubeconfig라고 한다. 기본적으로 kubectl은 $HOME/.kube 디렉터리에서 config라는 이름의 파일을 찾는다. KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 지정해서 다른 kubeconfig 파일을 사용할 수 있다. Kubectl Reference Docs kubernetes.io ✅ clusters : kubernetes api server 정보. 여러 클러스터들을 명시할 수 있다. ✅ users : kubernetes api에 접속하기 위한 사용자의 목록. ✅ context : user와 cluster의 관계를..

Kubernetes 2022.02.05

failed to create listener: failed to listen on 127.0.0.1:10257: listen tcp 127.0.0.1:10257: bind: address already in use

⚠️ kubernetes controller-manager가 실행되지 않고, CrashLoopBackOff 상태가 지속된다. 로그를 찍어보니 "failed to create listener: failed to listen on 127.0.0.1:10257: listen tcp 127.0.0.1:10257: bind: address already in use" 에러가 났다. 아래의 명령어를 통해 서비스가 이미 바인딩되어 해당 포트를 사용하지 못하는 것을 확인했다. 10257을 종료하고 kubelet 서비스를 다시 시작했더니 controller-manager가 정상적으로 Running 상태가 되었다. $ netstat -lutpn | grep 10257 tcp 0 0 127.0.0.1:10257 0.0.0...

Kubernetes 2022.01.11

dial tcp <master node address>:6443 : connect: no route to host

worker node에서 kubeadm join을 실행했는데, 로그가 더 이상 나오지 않고 Running pre-flight checks에만 멈추어 있었다. kubeadm join --v=2 명령어를 통해 오류의 원인을 알아보았다. 문제의 원인은 마스터 노드가 포트 6443을 외부에 노출하지 않았기 때문이었다. 문제 해결을 위해서 아래의 방법을 시도했다. 1) api-server ip 확인하기 .kube/config 파일을 참고하거나 아래의 명령어를 통해 확인할 수 있다. kubectl describe pod/kube-apiserver- -n kube-system 2) 포트 6443이 열려있는지 확인하기 curl https://:6443 2) 포트 6443이 열려있는지 확인하기 아래와 같은 인증서관련 출..

Kubernetes 2022.01.10

What is Container?

✅ Kernel과 System Call Kernel이란? 하드웨어의 자원을 자원이 필요한 프로세서에 나눠주고, 덩달아 프로세서 제어, 메모리 제어, 프로그램이 운영체제에 요구하는 System call을 수행하는 부분 System Call이란? 사용자 모드의 프로세서들이 파일을 쓰거나 불러오기 위해서 커널에 요청해 커널 모드에서 처리하고 그 결과를 사용자 모드의 프로그램에 전달하는 것 ✅ namespacing과 control Groups Chrome은 python v2를 Node js는 python v3에만 엑세스할 수 있다고 가정하자 💡 해결 방안 : namespacing과 control groups를 이용해 단일 프로세스를 분리하고 제한할 수 있다. Namespacing이란? 동일한 시스템에서 별개의 ..

Docker 2022.01.07

Docker Engine에 대해서 알아보자

✅ Docker Engine의 구성 요소 Docker CLI Docker Engine API Docker Daemon Docker CLI는 docker run과 docker build와 같은 Docker 명령을 실행하는 커멘드 라인 도구이다. Docker Daemon(dockerd)은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리한다. Daemon은 Docker 서비스를 관리하기 위해서 다른 Daemon과 통신할 수도 있다. ✅ Docker Engine 동작 방식 Client - Server 구조로 이해하면 이해가 쉽다. Docker CLI가 Client이고, Docker Daemon이 Server의 역할을 수행한다. Docker CLI가 Doc..

Docker 2022.01.07

1. 쿠버네티스 소개하기

1.1 Container 리눅스는 프로세스별로 자원을 격리해서 사용하는 cgroup과 특정 디렉터리로 권한을 제한하는 chroot등으로 격리 환경을 구성할 수 있다. 여기서 디스크의 파일 변경 사항을 레이어 형태로 저장하는 파일 시스템을 합해 컨테이너라는 개념이 탄생했다. 가상화나 클라우드 컴퓨팅을 설명할 때는 가상 머신을 많이 언급했다. 컨테이너와 vm는 아래와 같은 차이가 있다. 🖥 VM VM은 컴퓨팅 환경을 소프트웨어로 구현한 것 즉, 컴퓨터를 애뮬레이션하는 소프트웨어이다. Host OS가 있고, Hypervisor(VMWare, KVM, Xen, etc)가 하드웨어를 가상화한다. VM은 Hypervisor에 의해 독립된 가상 하드웨어 자원을 할당 받으며, 가상 머신마다 게스트 운영체제가 있고 그 ..

Kubernetes 2022.01.07

Volume에 대해 알아보자 [emptyDir, hostpath] - 1

storage란? storage는 컴퓨터에 데이터를 저장하는 저장소 역할을 수행하는 부품이다. 컴퓨터의 하드디스크와 동일한 역할을 수행하는 부품이며, 스토리지를 직접 서버에 연결할 수 있다. 대용량의 데이터를 저장하기 위해 별도의 스토리지용 네트워크를 구성할 수 있다. Volume을 사용해야 하는 이유 컨테이너 실행 중에 문제가 발생해 컨테이너가 삭제된다면, 데이터도 같이 삭제된다. 이때 로그 파일을 저장하거나, 데이터 베이스를 사용할 경우 실시간으로 생성되던 데이터가 사라지면 큰 장애가 발생한다. 따라서 컨테이너 사용 시 중요한 데이터는 볼륨을 사용해 보관해 주어야 한다. Volume의 종류 emptyDir Pod가 실행되는 디스크 공간에 볼륨을 마운트 한다. 주로 컨테이너끼리 데이터 공유를 위해서 사..

Kubernetes 2022.01.05
반응형