개요 CKA 공부를 위해 KillerCoda 사이트 문제를 풀이한다. 목표 Kubernetes Apiserver 장애를 복구한다. 여정 The Apiserver manifest contains errors 문제를 해석하면 kubernetes의 apiserver 설정에서 잘못된 부분 3곳을 수정하여 복구하는 과정을 요구한다. /var/log/pods 위치에 kube-system_kube-apiserver-controlplane로 시작하는 디렉토리부터 확인하자 없다면 yaml 파일 문법에서부터 오류가 난 것이다! # 로그 기록 확인 cat /var/log/syslog | grep kube-apiserver ... Could not process manifest file" err="/etc/kubernetes..
개요 CKA 공부를 위해 KillerCoda 사이트 문제를 풀이한다. 목표 Kubernetes Apiserver 장애를 복구한다. 여정 Configure a wrong argument 문제를 해석하면 kubernetes의 apiserver을 잘못된 인자(--this-is-wrong)를 심고, 이를 로그 위치에서 확인한 뒤, 원래대로 복구하는 과정을 요구한다. 로그는 다양한 방법으로 확인할 수 있지만 아래 방법 순서로 확인했다. # kubelet 상태 확인 journalctl # cri 상태 확인 crictl ps ... # cri 로그 확인 crictl logs ... # 로그 기록 확인 cd /var/log/pods cd /var/log/containers 이제 잘못된 인자를 주입하고 복구해보자. # ..
개요 자주 쓰이는 상황별 쿠버네티스 명령어를 정리한 글입니다. (수시로 업데이트 됩니다. 2023/04/16) 더 자세한 내용은 공식 문서를 참조하시면 좋습니다. (kubectl 치트 시트 | 명령줄 도구 (kubectl)) 상황별 명령어 모음 Pod, Node 조회 # 마스터 노드에서만 실행가능 # Nodes sudo kubectl get nodes sudo kubectl get nodes -o wide # + 상세정보 # Pods # 모두 조회 sudo kubectl get pods -n kube-system # 특정 네임스페이스 조회 # 특정 노드 상세 sudo kubectl describe nodes ${노드명} # 클러스터 정보 조회 sudo kubectl cluster-info WorkerNo..
개요 On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 목표 Ingress 적용을 통해 Service가 어떤 방식으로 트래픽을 전달하는지 이해한다. 여정 Service와 Service Type Service에서 통신을 위해 사용하는 Type은 아래와 같이 3가지가 있다. NodePort 외부에서 접속하기 위해 사용하는 포트 port Cluster 내부에서 사용할 Service 객체의 포트 targetPort Service객체로 전달된 요청을 Pod(deployment)로 전달할때 사용하는 포트 전체 서비스 흐름으로 보면 NodePort --> Port --> targetPort 이다. Ingress란? Ingress는 클러스터 내의 서비..
개요 On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 목표 쿠버네티스 클러스터 내 공유 디렉토리를 사용하기 위한 NFS(Network File System) 서버 설정 PV, PVC, NFS, StorageClass의 관계를 이해한다. 여정 PV와 PVC의 관계 쿠버네티스는 하나 이상의 컨테이너를 포함하는 Pod를 최소 단위로 동작한다. 이러한 Pod가 데이터를 저장하는 공간이 PV(Persistent Volume)이다. 하지만, 한 볼륨을 공유하거나, 다른 볼륨으로 변경해야 할 경우가 생긴다면 어떻게 해야할까? PVC(Persistent Volume Claim)이라는 리소스가 이를 해결해준다. Pod와 PV 간의 연결을 정의하여 PV..
개요 On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 목표 쿠버네티스 클러스터를 모니터링하고 종류별 상태를 시각화하기 위한 대시보드 설치 Node의 하드웨어 상태 각 Namespace 별 리소스 상태 Master의 API Server 상태 등 여정 헬름(Helm) 설치 Helm은 쿠버네티스의 패키지 관리를 도와주는 Managing Tool입니다. (공식문서) Helm은 아래와 같이 크게 세가지 요소을 가지고 있습니다. Chart : yaml 파일을 묶어서 정의한 package로 app을 실행시키기위한 모든 리소스가 정의됨. Repository : 생성된 chart들이 저장, 공유되는 공간입니다. docker hub와 유사함. Relea..
개요 On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 목표 k8s 환경 내에 간단한 서비스를 배포하기 (배포 과정이 목적이기 때문에 기본 이미지를 사용한다!) 여정 컨테이너 이미지 작성(k8s Hello World) # k8s에서 만든 hello world 컨테이너 이미지 kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 # 결과 확인 curl http://: Deployment YAML 작성 어플리케이션의 컨테이너 이미지와 실행정보를 담은 YAML apiVersion: apps/v1 kind: Deployme..
개요 On-premise에서 kubernetes(= k8s) 환경을 직접 구성해보며 학습하는 Hands On 시리즈입니다. 목표 On-premise 환경에서 Linux 위에 Kubernetes 클러스터 환경 구성 Linux CentOS 7.x Kubernetes 1.25.5 CRI : CRI-O 1.19 CNI : Calico 3.25 Master 1대, Worker 5대 → Worker에만 GPU 설치 여정 공통 - 마스터 & 워커 CRI-O 설치 (CRI-O Docs | CRI-O 기반 쿠버네티스 설치) 1.24.0부터 Dockershim이 제거가 되었다. (참고 : 흔들리는 도커(Docker)의 위상 - OCI와 CRI) 때문에, Container를 실행할 런타임 인터페이스 CRI가 필요하다. CR..
개요 Spring에서는 입력값의 오류를 검증하기 위한 다양한 방법을 지원한다. 이를 통해 서비스 로직과 오류 검증 로직을 분리할 수 있다. 목표 if/else를 통한 입력값 검증을 Spring에서 지원하는 방법으로 대체한다. 여정 검증하기 - if/else 에러를 문자열 Map 형태로 처리하고 있어, 자칫 Human Error를 발생시킬 수도 있는 상황이다. 오타가 발생하거나 복사-붙여넣기 등으로 같은 에러를 중복하여 발생시킨다면 앞의 값이 덮어씌워져 모르는 사이에 에러가 하나 줄어들어 출력될 수도 있다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Mod..
개요 Spring은 메시지 내용을 properties 설정 파일에서 불러올 수 있다. 또한, 국제화를 위해 다국어 설정도 지원한다. 여정 설정파일 이름 지정 스프링 부트는 application.properties에서 아래와 같이 메시지 설정파일의 이름을 지정해줄 수 있다. (기본값이 messages 이기 때문에 아래 코드를 적지 않아도 적용된다) spring.messages.basename=messages 즉, messages.properties, errors.properties라는 설정파일을 기본적으로 읽어와 사용할 수 있다. 설정파일의 위치는 /resources/messages.properties 위치에 두면 된다. 메시지 관리 기능 설정파일의 이름을 코드로 지정하고 사용할 수도 있다. @Bean p..