the connection to the server 6443 was refused 에러 정리

DevOps Engineer·2023년 9월 26일
0

상황

  • 메모리 증설로 인한 재부팅이 요구되는 상황에서 kubelet과 apiserver의 통신이 되지않음
  • kubelet과 docker daemon.json의 값에서 systemd 지정해주는 옵션이 있는데 이 부분이 일치하지 않을 경우 발생했음

Kubernetes 클러스터를 만들면서 생긴 에러



보면 kubeadm init으로 클러스터를 구축 시 발생한 에러들인데 정상적으로 통신이 되다가 갑자기 어느 순간 kubectl 명령어가 잘 안되는 것을 볼 수 있었음

찾아보니 공식문서에서도 명시되어 있었음
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

CRI 별로 조치가 다르다

docker 기반 cri-o 일 경우

vi /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",   
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

containerd로 init하는 경우

#default값 변경
containerd config default > /etc/containerd/config.toml
#config 수정
vi /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true  <-- false 에서 true 로 변경

kubelet 설정

vi /var/lib/kubelet/kubeadm-flags.env

KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.6 --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock --cgroup-driver=systemd"

kubeadm에서 사용하는 kubelet 설정 값

이후 kubeadm init할 시 정상적인 systemctl status값을 확인할 수 있음

profile
madame의 Techblog

2개의 댓글

comment-user-thumbnail
2024년 8월 6일

감사합니다... 덕분에 해결했습니다..

1개의 답글