Container/Kubernetes 22

[Kubernetes] 쿠버네티스 kube-flannel CrashLoopBackOff 해결 방법 (Error registering network: failed to acquire lease: node "node1" pod cidr not assigned)

쿠버네티스 kube-flannel CrashLoopBackOff 해결 방법 (Error registering network: failed to acquire lease: node "node1" pod cidr not assigned) 아래와 같이 kube-flannel이 CrashLoopBackOff가 발생하였습니다. 로그를 확인해본 결과 Error registering network: failed to acquire lease: node "node1" pod cidr not assigned 에러가 발생중인것을 확인할 수 있었는데, 해외 문서에 따르면 불분명한 문제(?)로 Pod CIDR 임대 실패하여 발생하는 에러라고 합니다. 저는 아래와 같이 해당 현상을 해결할 수 있었는데, 우선 아래 명령어를 입력..

[Kubernetes] 쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm)

쿠버네티스 온프레미스 환경에서 직접 설치하기 (kubernetes install on premise, kubeadm) 온프레미스 환경에서 쿠버네티스를 설치하기 전에 사전 작업들을 해주어야할 필요성이 있습니다. 해당 글은 사전작업 → Docker 설치 → Kubernetes 설치 및 master-worker node 연동 순으로 진행 됩니다. 저의 환경은 아래와 같으며 본인 환경에 따라 적절히 변경하여 설치를 진행 해주시면 됩니다. OS : CentOS 7 master node 1대, worker node 3대 구성 모든 서버 root 계정으로 설치 및 연동 진행 1) 호스트 네임 변경 (master node, worker node 적용) 아래와 같이 echo와 hostnamectl 명령어를 이용해 호스트..

[Kubernetes] 쿠버네티스 "coredns CrashLoopBackOff", "10.96.0.1:443: connect: no route to host" 에러 (firewalld)

쿠버네티스 "coredns CrashLoopBackOff", "10.96.0.1:443: connect: no route to host" 에러 (firewalld) 아래와 같이 corends CrashLoopBackOff가 발생하며 Pod Log를 확인했을때 "10.96.0.1:443: connect: no route to host" 에러가 발생할 경우 firewalld가 실행중인것은 아닌지 확인해볼 필요성이 있습니다. 저의 경우 아래 명령들을 통해 에러가 해결되었습니다. systemctl stop firewalld systemctl stop kubelet systemctl stop docker iptables --flush iptables -tnat --flush systemctl start kubel..

[Kubernetes] 쿠버네티스 master node "NotReady" 해결 방법 (coredns pending)

쿠버네티스 master node "NotReady" 해결 방법 (coredns pending) 쿠버네티스를 설치하고나서 보니 마스터노드의 NotReady 가 발생 하였는데, get pods로 확인해보니 coredns가 Pending 상태임을 확인 하였습니다. 보통 노드와의 통신이 안되거나 CNI 설치가 되어있지 않은 경우에 coredns pending이 발생하기 때문에, CNI를 설치해주시거나 아래 방법으로 kube-flannel.yml을 적용시켜 해결하는 방법이 있습니다. 1) kube-flannel.yml 적용 kubectl edit cm coredns -n kube-system를 입력하여 24라인의 loop 부분을 주석 처리 아래 명령 입력 kubectl apply -f https://raw.git..

[Kubernetes] 쿠버네티스 cordon,drain,PDB 개념과 정리 (k8s Poddisruptionbudget)

cordon cordon은 특정 노드를 선택하여 스케줄 대상에서 제외 시킵니다. 간단한 deployment nginx 이미지를 생성해주는 매니페스트 파일을 작성 후 아래와 같이 cordon 명령을 실행하면 선택한 특정 노드가 SchedulingDisabled 상태가 되는것을 확인할 수 있습니다. kubectl get nodes : 기존 노드 STATUS 확인 kubectl get pod -o custom-columns=Pod:metadata.name,Node:spec.nodeName : Pod가 배치된 노드 확인 kubectl cordon [노드네임] : 해당 노드에 cordon 적용 kubectl get nodes : 기존 노드 STATUS에 SchedulingDisabled가 추가된 내용 확인 이후 ..

[Kubernetes] 쿠버네티스 HPA 개념과 구성 (HorizontalPodAutoscaler, 오토스케일러)

쿠버네티스 HPA 이란? HPA(HorizontalPodAutoscaler)는 CPU, Memory 등 리소스가 정해둔 임계치를 초과할 경우 자동으로 스케일 아웃(Pod의 리소스를 증가 시키지 않고, Pod 개수 자체를 늘려줌) 해주는 기능을 갖추고 있습니다. HPA 컨트롤러가 리소스를 체크하며 정해둔 replicas 수에 맞춰 Pod를 줄이거나 늘려줍니다. 아래 리소스들을 이용하여 HPA를 구성할 수 있습니다. Deployment Replicaset StatefulSet Recplication Controller , 쿠버네티스 HPA 구조 위와 같은 과정을 통해 replicaset을 배포하고, 모든 Pod의 사용률 총합을 구한 뒤 HPA 매니페스트 파일에 지정한 사용률을 나눠 배포할 replicas 개..

[Kubernetes] kubespray로 ansible-playbook 명령어 실행 시 "assertion: groups.etcd | length is not divisibleby 2" 에러

kubespray "assertion: groups.etcd | length is not divvisibleby 2" 에러 kubespray 설치 후 ansible-playbook 명령어로 k8s 설치 진행 시 "assertion: groups.etcd | length is not divisibleby 2" 에러가 발생할 수 있습니다. 해당 에러는 아래 이미지와 같이 inventory.ini 파일에 지정한 etcd가 짝수인 경우에 발생할 수 있습니다. 이 에러를 해결하기 위해선 etcd를 홀수로 늘리기 위해 노드를 추가하거나, -e ignore_assert_errors=yes 옵션을 추가하여 해결할 수 있습니다. 저같은 경우 테스트용이기도 하고 노드를 더이상 추가 하기가 힘들어서 -e ignore_ass..

[Kubernetes] 쿠버네티스 볼륨 개념 2편 (PersistentVolume, PersistentVolumeClaim)

쿠버네티스 볼륨 개념 1편 (emptyDir, hostPath) : https://nirsa.tistory.com/156?category=871751 쿠버네티스 PV (Persistent Volume)와 PVC (persistent Volume Claim) 이란? PV는 관리자에 의해 생성된 볼륨을 뜻하고, PVC는 사용자가 볼륨을 사용하기 위해 PV에 요청을 하게 됩니다. 컨테이너의 /var/log/test.log 디렉토리를 워커노드의 /tmp/log_backup 경로에 PVC와 PV 설정을 하면 아래와 같은 형태가 될 수 있습니다. PV와 PVC의 Lifecycle PV와 PVC는 크게 4가지 정도의 Lifecycle을 가집니다. 1. 프로비저닝 (provisioning) 정적(static) 또는 동..

[Kubernetes] 쿠버네티스 볼륨 개념 1편 (emptryDir, hostPath)

볼륨을 사용해야하는 이유? 컨테이너 특성 상 어떠한 문제가 발생하여 컨테이너가 삭제 된다면 데이터도 같이 삭제 됩니다. 웹 소스 파일의 경우 이미지에 들어있어 삭제 되더라도 상관 없겠지만(컨테이너에서 웹소스를 변경하지 않는 이상) 로그 파일을 보관해야 한다거나, 데이터 베이스를 사용할 경우 실시간으로 생성되던 데이터가 사라지면 큰 장애가 발생 합니다. 이러한 이유로 컨테이너를 사용할 때 중요한 데이터가 있다면 볼륨을 사용하여 데이터를 보관해주어야 합니다. 1-1. emptryDir 개념과 예시 코드 emptryDir은 Pod가 사라지면 볼륨도 같이 삭제되는 임시 볼륨의 성격을 가지고 있고 Pod가 실행되는 디스크의 공간에 볼륨 마운트를 하게 됩니다. 위의 이유로 Life cycle이 컨테이너가 아닌, P..

[Kubernetes] 쿠버네티스 RBAC-클러스터롤바인딩(clusterrolebinding) 개념 및 설정

RBAC 개념 및 롤바인딩 : https://nirsa.tistory.com/154 쿠버네티스 클러스터롤바인딩(clusterrolebinding) 이란? 클러스터롤은 특정 API나 리소스(pod,deploy 등), 사용권한(get, edit 등)을 매니페스트 파일에 명시해둔 규칙의 집합이 되며 클러스터 전체 사용 권한을 설정 해줍니다. 롤은 특정 네임스페이스의 권한만을 주므로 롤과 클러스터롤은 차이점이 있습니다. 클러스터롤바인딩은 사용자와 클러스터롤을 묶어주는 역할을 수행하고, 지정한 사용자들에 한해서 롤에 명시한 규칙들을 기준으로 권한을 사용할 수 있도록 관리 합니다. 클러스터롤바인딩 구성 구성전에 간단한 디플로이먼트가 필요하며, 코드가 없으신분들은 아래 코드를 사용하시면 됩니다. apiVersion:..