현상 - 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 |