주녁, DevNote
article thumbnail
Published 2023. 2. 17. 19:00
CKA 뽀개기 - Apiserver Crash DevOps

개요

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

이제 잘못된 인자를 주입하고 복구해보자.

# apiserver 위치로 이동
cd /etc/kubernetes/manifests

# 복원용 백업파일 생성
cp kube-apiserver.yaml kube-apiserver.bak

# 설정 변경
vi kube-apiserver.yaml
...
spec:
  containers:
  - command:
  	- --this-is-wrong # 잘못된 인자 삽입
    
---

# 변경된 설정 적용
kubectl apply -f kube-apiserver.yaml

# 로그 확인
k logs pod/kube-apiserver-controlplane -n kube-system

# 로그 확인 방법2(직접 파일위치로 이동)
cd /var/log/pods
cd kube-system_kube-apiserver_2fc87b52-2a44-4b3c-8bad-0074e11e1c16/

cat 3.log 
# 2023-02-16T15:02:02.20681146Z stderr F Error: unknown flag: --this-is-very-wrong

# 복구
cp kube-apiserver.bak kube-apiserver.yaml
kubectl apply -f kube-apiserver.yaml

 


Misconfigure ETCD connection(잘못된 etcd 연결 설정)

1번 문제와 동일한 방식으로 진행한다.

다만, /var 이하에 있는 로그에 대한 확인은 금지한다.

# apiserver 위치로 이동
cd /etc/kubernetes/manifests

# 복원용 백업파일 생성
cp kube-apiserver.yaml kube-apiserver.bak

# 설정 변경
vi kube-apiserver.yaml
...
spec:
  containers:
  - command:
  	- --etcd-servers=this-is-very-wrong # 잘못된 인자로 변경
    
    
---

# 변경된 설정 적용
kubectl apply -f kube-apiserver.yaml # 에러 발생

# 로그 확인
journalctl | grep apiserver

# 복구
cp kube-apiserver.bak kube-apiserver.yaml
kubectl apply -f kube-apiserver.yaml

Invalid Apiserver Manifest YAML(올바르지 않은 YAML 설정)

# apiserver 위치로 이동
cd /etc/kubernetes/manifests

# 복원용 백업파일 생성
cp kube-apiserver.yaml kube-apiserver.bak

# 설정 변경
vi kube-apiserver.yaml
...
apiVersionTHIS IS VERY ::::: WRONG v1 # 잘못된 문법으로 변경
    
    
---

# 변경된 설정 적용
kubectl apply -f kube-apiserver.yaml # 에러 발생

# 로그 확인
journalctl | grep apiserver

# 복구
cp kube-apiserver.bak kube-apiserver.yaml
kubectl apply -f kube-apiserver.yaml

마무리

이번 시간에는 kubernetes의 로그 확인과 기본 설정 변경으로 문제를 해결했다.

중요한 것은 apiserver의 기본 위치(/etc/kubernetes/manifests)와

로그 확인 방법(journalctl | grep apiserver) 이다.

profile

주녁, DevNote

@junwork

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!