본문 바로가기

트러블슈팅[쿠버네티스] 쿠버네티스 calico node READY 0/1 쿠버네티스 초기화 후 calico 설치시 calico-node의 status가 Running이지만, 한참이 지나도 Ready된 컨테이너가 0/1 인때가 있다. 내경우 이런때는 보통 호스트 네트워크의 주소 범위와 calico의 주소 범위가 겹쳐 충돌로 인해 생기는 문제였다. vpc cidr = 172.16.0.0/16 이였고, pod cidr = 172.16.0.0/16 로 설정하여, 동일한 주소 범위 였기에 이런 문제가 발생했었다. 물론 calico 설치시 주소 범위를 기본 192.168.0.0/16에서 172.16.0.0/16으로 변경해주고 설치했었지만, calico-node pod가 동작하지 않았었다. kubectl describe 를 통해 pod의 문제를 검색해보니, cidr이 겹쳐 생기는 문제라 .. 더보기
트러블슈팅[쿠버네티스] 클라우드 상에서 쿠버네티스 Calico IPIP 모드 쿠버네티스의 경우 CNI 플러그인을 사용하여 네트워크 솔루션을 갖는다. 여기엔 다양한 CNI 플러그인이 존재하지만 이번 포스팅에선 calico 네트워킹에 대해 다룬다. 발견 같은 pod에서 동일한 service로 콜을 날리게 되면 간헐적으로 통신이 안되는 현상이 있었다. 이유를 알아보기 위해 서비스의 end point인 pod들을 모두 모니터링 하며 콜을 날려봤다. 같은 노드에 존재하는 pod로 통신이 가는경우에는 통신이 잘 이루어지지만, 다른 노드에 있는 pod로 갈경우 통신이 이루어지지 않음. 다음 그림과 같이 Pod A, Pod B가 Service A로 묶여있고, Test Pod에서는 Service A로 통신을 진행한다. 요청이 Service A가 지정한 라우팅 테이블을 따라 Pod A로 갈 경우에.. 더보기
쿠버네티스 기본 오브젝트 Ingress Ingress는 클러스터로 들어오는 http 트래픽을 관리해주는 쿠버네티스 오브젝트다. Ingress 는 로드밸런싱, TLS 종료, 가상 호스팅 등 서비스를 제공해주게 된다. 인그레스(Ingress) FEATURE STATE: Kubernetes v1.19 [stable] 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함. 인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공 kubernetes.io Ingress 리소스는 트래픽 처리를 위한 하나의 규칙이며 이 규칙을 동작시켜 주는것이 Ingress Controller다. 이러한 Ingress Controller가 실질적으로 http 트래픽을 관리 해주게 되며, 이 관리 규칙이 Ingre.. 더보기
쿠버네티스 기본 오브젝트 Service (이전 완료) 쿠버네티스의 Pod들은 언제든지 삭제되고 생성될 수 있는 자원이다. 그렇기 때문에 클러스터 내에서 이러한 서비스에 접근할때 각 Pod들의 ip를 사용한다는건 여간 불편한 일이 아닐 수 없다. 예를들어 클러스터 내에서 로그인 서비스를 제공해주는 Pod와, 계정 정보가 담긴 데이터 베이스 Pod들 이런 문제를 해결하기 위해 Service라는 오브젝트가 있다. Service의 목적은 서비스를 제공하는 여러개의 Pod들의 단일 진입점을 제공해주고 DNS를 통한 접근을 가능하게 해주며 요청을 여러개의 Pod로 분산시켜주는 로드밸런싱의 기능을 하게 된다. 서비스 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법 쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해.. 더보기
쿠버네티스 기본 오브젝트 Pod (이전 완료) Pod는 쿠버네티스 오브젝트중 가작 작은 단위로써, 하나 이상의 컨테이너로 이루어진 집합이다. 파드 운영 수준의 컨테이너 오케스트레이션 kubernetes.io Pod내 컨테이너들은 네트워크와 스토리지를 공유해 localhost로 서로 통신할 수 있고, Pod끼리는 격리되어 있다. 쿠버네티스에서 바라보는 Pod는 언제든 대체 가능한 자원이다. 즉 망가지거나 문제가 생기면 언제든 버리고 새로운 Pod로 갈아치울 수 있도록 하는것이 Pod의 역할이다. Pod들은 클러스터 내에서 유일한 IP를 가지고 있고 이는 쿠버네티스 초기화시 사용된 cidr 범위 내에서 제공된다. 이러한 pod는 다양한 생성 방법이 있지만 여기선 yml파일작성을 통한 생성에 대해 알아본다. apiVersion: v1 kind: Pod m.. 더보기
쿠버네티스 설치 (이전 완료) 본 포스팅에서 사용하는 버전은 쿠버네티스 1.24 우분투 20.04 calico 3.23 을 기준으로 사용한다. 설치는 마스터 하나, 워커 2개 설치를 진행하며 공통적으로 해야하는 부분과, 각 노드마다 설정해 줘야하는 부분으로 나눠서 설명한다. 공통 설치를 위해 각 노드들의 방화벽 설정은 열어두고 진행. 마음 편하게 private network 상 패킷만 모두 통과하는 정책을 사용하거나 모두 꺼두고 진행하는게 편하다. 0. swap 메모리 끄기 쿠버네티스는 자원 관리를 확실히 하기 위해 swap 메모리를 사용하지 않는다. 아래 명령어로 swap 메모리를 비활성화 한다. sudo swapoff -a 1. 네트워크 설정 cat 더보기
쿠버네티스 Pod 네트워크 (이전 완료) 쿠버네티스는 Pod라는 컨테이너의 집합으로 서비스를 관리한다. Pod는 하나 이상의 컨테이너들로 이루어진 단위이며, 쿠버네티스에서 가장 작은 단위이다. 이러한 Pod는 하나의 서비스 컨테이너를 감싸는 Wrapper 형태로 사용할수도, 하나의 컨테이너와 그 컨테이너를 보조하는 사이드카 패턴으로 사용하거나, 두개 이상의 컨테이너가 조합된 형식으로도 사용될 수 있다. 파드 운영 수준의 컨테이너 오케스트레이션 kubernetes.io 쿠버네티스 클러스터 내에서는 이러한 Pod들이 여러개 생성되어 동작하게 되며, 이러한 Pod들이 가지는 네트워크 이슈로는 4가지 이슈가 있다. 1. 동일 Pod내 컨테이너끼리 네트워크 2. 동일 노드 내 Pod끼리 네트워크 3. 동일 클러스터내 다른 노드간의 Pod끼리 네트워크 4.. 더보기
쿠버네티스란 (이전 완료) 컨테이너 오케스트레이션 컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다. 컨테이너 오케스트레이션이란? 컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화합니다. www.redhat.com 컨테이너는 프로세스 격리를 통해 애플리케이션의 독립적인 수행을 가능하게 해줬다. 이는 기존 VM방식보다 적은 리소스로 높은 효율을 낼 수 있게 되었다. 하지만 이런 컨테이너가 많아짐에 따라 컨테이너를 관리할 서비스가 필요로 하게 되었고 이를 지원해주는 서비스가 컨테이너 오케스트레이션이다. 오케스트레이션의 기능은 다양하지만, 크게 다음과 같은 기능들을 가진다 배치 및 스케일링 장애 복구 dns 네트워크 로드밸런싱, 단일 진입점 제공 이러한 오케스트레이션에는 쿠버네티스.. 더보기