현상 - VM에 설치되어 있는 K8S가 VM 재기동시 kube-apiserver가 정상적으로 기동되지 않음

 

 

1. kubespray에 보면 설치전에 환경 설정을 하는 yml 파일이 있음

 - /kubespray/role/kubernetes/preinstall/tasks/0080-system-configurations.yml

 -  selinux 설정, network 설정 등과 함께 OS에 대한 설정 값 변경 내용이 있음

 

...
- name: Ensure kube-bench parameters are set
  sysctl:
    sysctl_file: /etc/sysctl.d/bridge-nf-call.conf
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    state: present
    reload: yes
  with_items:
    - { name: vm.overcommit_memory, value: 1 }
    - { name: kernel.panic, value: 10 }
    - { name: kernel.panic_on_oops, value: 1 }
  when: kubelet_protect_kernel_defaults|bool
...

 

2. K8S Mstart Node의 /var/log/messages 로그에 다음과 같은 Fatal 에러 발생

~~ kubelet.go~ Failed to start ~ invalid kernal flag: vm/overcommit_memory, expected value: 1, actual value : 0, invailed kernel flag: kernel/panic, expected value: 10, actual value: 0]

 

 

3. /etc/sysct.conf 파일에 보면 kubespray로 배포 할 때와 옵션 같이 다른 것을 확인

 - VM이 재기동 하면 sysctl.conf를 다시 읽기 때문에 옵션값이 변경 됨.

 - k8s 배포할 때 /etc/sysctl.d/bridge-nf-call.conf 파일에 해당 옵션값을 저장하고 적용

 

4. 모든 노드의 옵션 변경

ansible -m shell -a "sysctl -p /etc/sysctl.d/bridge-nf-call.conf" -i inventory/k8s/inventory.ini all 

 

 

 

 

'Kubernetes' 카테고리의 다른 글

[Gatekeeper] K8S 클러스터 정책 제어  (0) 2021.09.10
[custom-columns] event 정렬  (0) 2021.09.10
ETCD 백업 & 복구  (0) 2021.07.20
[bash 자동완성] bash-completion  (0) 2021.07.15
[Service Account #1] 외부 클러스터 컨트롤  (0) 2021.06.30

+ Recent posts