기본 콘텐츠로 건너뛰기

6월, 2021의 게시물 표시

[kubernetes-troubleshooting] Namespace 삭제 명령에도 삭제되지 않는 Pod 삭제하기

# How to force deletion of pods on namespace ## 문제 상황 이전 게시글인 [삭제되지 않는 네임스페이스 Namespace 강제로 삭제하기](https://ccambo.blogspot.com/2021/01/kubernetes-troubleshooting-namespace.html) 를 통해 네임스페이를 삭제하는 방법을 알아 보았다. 이번 경우는 확실하게 눈으로 확인할 수 있는 파드 Pod 들이 남아 있고 `Terminating` 상태로 삭제되지 않는 문제가 발생했다. 테스트 했던 M3 오퍼레이터 Operator 를 장시간 유지하면서 etcd 클러스터가 응답하지 않는 상태가 발생했고, 삭제를 했지만 삭제되지 않는 문제인 상태다. ```bash $ kubectl -n m3cluster get pods NAME READY STATUS RESTARTS AGE ... etcd-0 1/1 Terminating 2 16d etcd-1 1/1 Terminating 2 16d etcd-2 1/1 Terminating 2 16d ... ``` ## 문제 원인 확인과 처리 방법 정상적으로 삭제될 수 있는 시간을 지나서도 `Terminating` 상태로 남아있는 상태는 대부분은 아래와 같은 원인으로 발생한다. - 파드에 처리되지 않는 파이널라이저 Finalizer 가 연결된 경우 - 파드가 종료 시그널에 응답하지 않는 경우 이런 상황에서 정보를 확인해야 한다. 1. **정보 출력** ```bash $ kubectl -n get pod -p -o yml [> undeleted_pod.yaml] ``` 화면에 출력을 사용하던지 아니면 화일로 출력해서 내용 중에서 `status` 부분과 `metadata.finalizer` 내용을 검토한다. 2. **파이널라이저 확인** st...

[Kubernetes-Storage] 정상적으로 동작하던 Dynamic NFS Provisioner 오류 해결하기 (SelfLink 관련)

# 정상적으로 동작하던 Dynamic NFS Provisioning에서 오류가 발생하는 문제 해결 > **참고** > > --- > > 쿠버네티스 Kubernetes 클러스터에 동적으로 NFS Network File System Provisioning 에 대한 글은 아래 게시글 참고 > > - [CentOS 8에 NFS 구성하기](https://ccambo.blogspot.com/2020/12/centos-nfs-centos-8-nfs.html) > - [Kubernetes Cluster에 NFS 기반의 Dynamic Storage Provision 설정하기](https://ccambo.blogspot.com/2021/01/kubernetes-storage-centos-8-dynamic-nfs.html) ## 상황 위의 게시글을 기준으로 NFS Provisioning 을 잘 사용하고 있었다. 추가로 쿠버네티스 클러스터를 구성해서 테스트를 해야하는 작업이 생겼고, 최신 버전의 쿠버네티스로 설치를 진행했다. 동일하게 NFS Provisioning 설정을 했고, 애플리케이션을 배포했을 때 계속 `Pending` 상태로 진행되지 않는 상황이 발생해서 로그 정보들을 통해서 검증하기 시작했다. 결론은 아래와 같이 `nfs-client-provisioner` 파드에서 오류가 발생하는 것으로 확인할 수 있었다. ```bash 2021-06-09T06:31:34.335294986Z E0609 06:31:34.335012 1 controller.go:682] Error watching for provisioning success, can't provision for claim "default/test-web-0": events is forbidden: User "system:serviceaccount:default:nfs-provisioner" cannot list ...

[Kubernetes] kubeadm 으로 ContainerD 기반 K8S Cluster를 CentOS 8 설치하기 (Docker 사용하지 않음)

# Docker를 사용하지 않고 Containerd 기반의 Kubernetes Cluster를 CentOS 8 에 kubeadm으로 설치하기 CentOS 8 버전부터 도커 Docker 는 레드햇의 도구인 `podman, buildah` 로 대체된 상태로 기본 패키지 저장소에서 제거되었고, API를 사용해서 처리되는 것이기 때문에 특정 툴에 한정될 필요가 없다. 현재 제공되고 있는 컨테이너 런타임 Container Runtime 은 다음과 같다. - [Docker](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker) - [CRI-O](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#cri-o) - [Containerd](https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd) 이 문서는 containerd를 사용해서 클러스터를 구성한다. - 1개의 마스터 노드와 3개의 워커 노드 모두 CentOS 8 설치 - 각 노드는 2G RAM, 2 CPU 를 최소 사양으로 한다. - 모든 노드는 저장소에서 쿠버네티스 Kubernetes 및 기타 필수 패키지를 설치할 수 있도록 인터넷에 연결이 가능해야 하고, dnf 패키지 관리자를 사용할 수 있으며 원격으로 패키지를 가져올 수 있는지 검증되어야 한다. > **설치환경 요약** > > 쿠버네티스의 `최소 요구 사항은 2G RAM, 2 CPU` 를 기준으로 한다. > > - Master > - CentOS 8.2.2004 > - monitor.master > - centos > - Worker > - CentOS 8.2.2004 > - monitor.wo...