강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

2romade님의 프로필 이미지
2romade

작성한 질문수

쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}

2.3.베이그런트(Vagrant)+버추얼박스(VirtualBox) 또는 수동 스크립트로 쿠버네티스 환경 구축하기 (x86-64 amd64 사용자)-v1.30

kubectl get nodes 관련 문의

작성

·

107

·

수정됨

0

질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다.
다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다!

[질문 전 답변]
1. 강의에서 다룬 내용과 관련된 질문인가요? [예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니요]
3. 질문 잘하기 법을 읽어보셨나요? [예 |
(https://inf.run/DvsRD)
4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다.
(https://inf.run/Ljaer)
[질문 하기]
안녕하세요.

일단 초기 구축 시 어떤 VM은 받아지고 어떤 VM은 잘 안받아져서 탑재해주신 OVA 파일로 내려받아 실습환경을 구성하고자 하였습니다.

올려주신 있는 그대로의 OVA를 다운로드 받아 cp-k8s vm을 켜고, 네트워크 환경도 말씀하신대로 세팅하여 하나씩 테스트해보고자 했으나 아래와 같은 문제 발생합니다.

#kubectl get nodes

couldn't get current server API group list: Get "https://192.168.1.10:6443/api?timeout=32s"

처음에는 2번째 어댑터의 DHCP 활성화 여부 문제인가 싶어 끄고 켜보며 테스트해보았고

대상 VM의 네트워크도 어댑터 1은 NAT 상태 유지, 2는 연결되지 않음 상태에서도 되지 않아 host only로도 바꿔보며 테스트해도 결과는 동일했습니다.

또한 DHCP를 켜고 나서 kubectl get nodes 명령을 치면 아래와 같이 결과가 다르게 도출되었습니다.

couldn't get current server API group list: Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: connection refused

또한 api나 포트 상태 확인을 위해 하기와 같이 입력시 확인 시 결과값이 도출되지 않았습니다..

#ps -ef | grep kube-apiserver

#netstat -ntlp | grep 6443

추가로 하기와 같은 명령어 기입 시 아래와 같이 떴습니다.

#systemctl status kubelet

Process: 1790 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)

하기와 같은 명령어 기입 시 아래와 같이 떴습니다.

#journalctl -u kubelet -xe

E1227 ... part of the existing bootstrap client certificate in /etc/kubernetes/kubelet.conf is expired

E1227 ... unable to load bootstrap kubeconfig: stat /etc/kubernetes/bootstrap-kubelet.conf: no such file or directory

분명히 어떤 부분에서 제가 잘 못 따라가고 있는 것 같아 최대한 이것저것 테스트해보았지만 스스로 해결하지 못해 문의 드립니다.

감사합니다.

답변 5

0

2romade님의 프로필 이미지
2romade
질문자

네 바쁘신 와중에도 같이 분석해주셔서 감사합니다.

일단 30분 가량 VM 켜둔채로 둔 후 다시 진행해보았지만 아래와 같은 에러만 무한 반복됩니다.

E0105 20:45:36.621775    7057 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: i/o timeout

 

그리고 말씀주신 " 잘 받아진다 안 받아진다 " 는 헷갈릴 소지가 있게 제가 말씀드렸네요.

ova 없이 구축하고자 했을때 가이드 주신대로 패키지나 설치파일 등을 설치했으나 제대로 되지 않았다는 말이였습니다.

그래서 ova로 해보려고 지금 시도중인 상황인데, 그것도 잘 안되고 있습니다.말씀하신 디스크 성능은 원인이 아니길 바랍니다.

 

마지막으로 말씀 주신 로그는 하단에 띄워드리겠습니다. 더 이상 분석이 안되면 다시 가이드대로 설치해보고 안되면 이론부분이라도 습득하면서 강의를 들어야할 것 같습니다.

회사 프로젝트 전에 쿠버네티스에 대해 아무것도 몰라 차근차근 배워나가고 실습하고자 시작했는데 잘 안되니 속상하네요.

실습은 실제 운영하면서 배우는걸로 하고

이 강의 포함 총 4개의 강의를 구매했기에 밑져야 본전 최대한 이론 습득 위주로 해도 충분할 강의라고 믿고 진행해보겠습니다.

root@cp-k8s:~# crictl logs $(crictl ps -a | awk '/etcd/ {print $1}')                      

{"level":"warn","ts":"2026-01-05T11:13:59.45457Z","caller":"embed/config.go:679","msg":"Ru

nning http and grpc server on single port. This is not recommended for production."}

{"level":"info","ts":"2026-01-05T11:13:59.456334Z","caller":"etcdmain/etcd.go:73","msg":"R

unning: ","args":["etcd","--advertise-client-urls=https://192.168.1.10:2379","--cert-file=

/etc/kubernetes/pki/etcd/server.crt","--client-cert-auth=true","--data-dir=/var/lib/etcd",

"--experimental-initial-corrupt-check=true","--experimental-watch-progress-notify-interval

=5s","--initial-advertise-peer-urls=https://192.168.1.10:2380","--initial-cluster=cp-k8s=h

ttps://192.168.1.10:2380","--key-file=/etc/kubernetes/pki/etcd/server.key","--listen-clien

t-urls=https://127.0.0.1:2379,https://192.168.1.10:2379","--listen-metrics-urls=http://127

.0.0.1:2381","--listen-peer-urls=https://192.168.1.10:2380","--name=cp-k8s","--peer-cert-f

ile=/etc/kubernetes/pki/etcd/peer.crt","--peer-client-cert-auth=true","--peer-key-file=/et

c/kubernetes/pki/etcd/peer.key","--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt","

--snapshot-count=10000","--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt"]}

{"level":"info","ts":"2026-01-05T11:13:59.456933Z","caller":"etcdmain/etcd.go:116","msg":"

server has been already initialized","data-dir":"/var/lib/etcd","dir-type":"member"}

{"level":"warn","ts":"2026-01-05T11:13:59.457375Z","caller":"embed/config.go:679","msg":"R

unning http and grpc server on single port. This is not recommended for production."}

{"level":"info","ts":"2026-01-05T11:13:59.457432Z","caller":"embed/etcd.go:127","msg":"con

figuring peer listeners","listen-peer-urls":["https://192.168.1.10:2380"]}

{"level":"info","ts":"2026-01-05T11:13:59.457591Z","caller":"embed/etcd.go:494","msg":"sta

rting with peer TLS","tls-info":"cert = /etc/kubernetes/pki/etcd/peer.crt, key = /etc/kube

rnetes/pki/etcd/peer.key, client-cert=, client-key=, trusted-ca = /etc/kubernetes/pki/etcd

/ca.crt, client-cert-auth = true, crl-file = ","cipher-suites":[]}

{"level":"error","ts":"2026-01-05T11:13:59.458781Z","caller":"embed/etcd.go:536","msg":"cr

eating peer listener failed","error":"listen tcp 192.168.1.10:2380: bind: cannot assign re

quested address","stacktrace":"go.etcd.io/etcd/server/v3/embed.configurePeerListeners\n\tg

o.etcd.io/etcd/server/v3/embed/etcd.go:536\ngo.etcd.io/etcd/server/v3/embed.StartEtcd\n\tg

o.etcd.io/etcd/server/v3/embed/etcd.go:131\ngo.etcd.io/etcd/server/v3/etcdmain.startEtcd\n

\tgo.etcd.io/etcd/server/v3/etcdmain/etcd.go:228\ngo.etcd.io/etcd/server/v3/etcdmain.start

EtcdOrProxyV2\n\tgo.etcd.io/etcd/server/v3/etcdmain/etcd.go:123\ngo.etcd.io/etcd/server/v3

/etcdmain.Main\n\tgo.etcd.io/etcd/server/v3/etcdmain/main.go:40\nmain.main\n\tgo.etcd.io/e

tcd/server/v3/main.go:31\nruntime.main\n\truntime/proc.go:250"}

{"level":"info","ts":"2026-01-05T11:13:59.459635Z","caller":"embed/etcd.go:375","msg":"clo

sing etcd server","name":"cp-k8s","data-dir":"/var/lib/etcd","advertise-peer-urls":["https

://192.168.1.10:2380"],"advertise-client-urls":["https://192.168.1.10:2379"]}

{"level":"info","ts":"2026-01-05T11:13:59.459659Z","caller":"embed/etcd.go:377","msg":"clo

sed etcd server","name":"cp-k8s","data-dir":"/var/lib/etcd","advertise-peer-urls":["https:

//192.168.1.10:2380"],"advertise-client-urls":["https://192.168.1.10:2379"]}

{"level":"fatal","ts":"2026-01-05T11:13:59.459723Z","caller":"etcdmain/etcd.go:204","msg":

"discovery failed","error":"listen tcp 192.168.1.10:2380: bind: cannot assign requested ad

dress","stacktrace":"go.etcd.io/etcd/server/v3/etcdmain.startEtcdOrProxyV2\n\tgo.etcd.io/e

tcd/server/v3/etcdmain/etcd.go:204\ngo.etcd.io/etcd/server/v3/etcdmain.Main\n\tgo.etcd.io/

etcd/server/v3/etcdmain/main.go:40\nmain.main\n\tgo.etcd.io/etcd/server/v3/main.go:31\nrun

time.main\n\truntime/proc.go:250"}

 

 

 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요

해당 방법으로는 10분 정도가 지나도 연결이 안된다면 해결되지 않을 것으로 보입니다. 타이밍 이슈인데 그게 발생하는 호스트 환경은 방법이 없더라고요.

그것보다 vagrant up이 되도록 해결하는게 휠씬 더 빠를 것으로 보입니다. 또는 vagrant up으로 이루어지는 과정 모두를 수동으로 진행하는 방법이 있긴 한데;;;; (추천하고 싶진 않네요)

로그 상으로는 192.168.1.10으로 etcd가 binding되지 않는다고 하는데 해당 원인을 알아야 합니다...

아마 cp-k8s에

ip -4 addr show | grep inet

를 입력해서 봐도 IP가 있을 가능성이 매우 높아서...

현재로서 가장 좋은건 vagrant up이 되도록 호스트를 수정/조정 하는 것입니다.(회사꺼라 보안 소프트웨어로 안 되는 경우가 아니라면요. / 이런거면 지금도 일부 연관이?)

여튼 개개인의 호스트 환경은 너무 많은 조건들을 가지고 있어서 제가 직접 파악하기가 어렵네요.

다만 실습 환경이 있고 없고는 매우매우매우 큰 차이가 있으니 구성되는 환경에서 진행하시기를 권장 드립니다.

2romade님의 프로필 이미지
2romade
질문자

감사합니다. 초보인 제가 보면 그냥 192.168.1.10이랑 통신 안되는 문제만 해결하면 될 것 같다는 생각이 드는데

 

2.3 강의의 17분 51초 쯤 나오는 해당 어댑터 부분하여 DHCP 서버를 사용함으로 바꿔야한다던가, VM 설정에서 네트워크를 -> 어댑터2 -> "다음에 연결됨" 이 부분을 "연결되지 않음"에서 뭔가로 바꿔줘야할까요?

어댑터 1은 "NAT"로 어댑터 2는 "연결되지 않음" 으로

OVA 파일의 네트워크가 세팅돼 있습니다

 

그래서 ifconfig를 하던

ip -4 addr show |grep inet 했을때 192.168.1.x 대역의 IP가 나오지 않고

아래와 같이 나옵니다.

 

root@cp-k8s:~# ifconfig -a                                                                

eth0: flags=4163 mtu 1500

inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255

ether 08:00:00:00:00:00 txqueuelen 1000 (Ethernet)

RX packets 8629 bytes 684814 (684.8 KB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 42365 bytes 3194172 (3.1 MB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eth1: flags=4099 mtu 1500

ether 08:00:27:fb:38:6e txqueuelen 1000 (Ethernet)

RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 0 bytes 0 (0.0 B)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

loop txqueuelen 1000 (Local Loopback)

RX packets 62866 bytes 11664146 (11.6 MB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 62866 bytes 11664146 (11.6 MB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

 

root@cp-k8s:~# ip -4 addr show |grep inet                                                 

inet 127.0.0.1/8 scope host lo

inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0

 

어댑터 2의 설정을 NAT로 바꾸면

이렇게 확인 됩니다.

root@cp-k8s:~# ip -4 addr show |grep inet                                                 

inet 127.0.0.1/8 scope host lo

inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic eth0

inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1

inet 10.0.3.15/24 metric 100 brd 10.0.3.255 scope global dynamic eth1

root@cp-k8s:~# kubectl get nodes

E0105 21:20:38.173434 8173 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: con

nection refused

E0105 21:20:38.173634 8173 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: con

nection refused

E0105 21:20:38.177331 8173 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: con

nection refused

E0105 21:20:38.177972 8173 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: con

nection refused

E0105 21:20:38.179843 8173 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: connect: con

nection refused

The connection to the server 192.168.1.10:6443 was refused - did you specify the right hos

t or port?

2romade님의 프로필 이미지
2romade
질문자

어.. 어댑터 2도 NAT로 변경한 후 시간 지나서 다시 입력하니

root@cp-k8s:~# kubectl get nodes                                                          

NAME STATUS ROLES AGE VERSION

cp-k8s Ready control-plane 6d7h v1.30.0

w1-k8s NotReady 6d6h v1.30.0

w2-k8s NotReady 6d6h v1.30.0

w3-k8s NotReady 6d6h v1.30.0

root@cp-k8s:~#

 

root@cp-k8s:~# k run chk-info --image=sysnet4admin/chk-info                               

pod/chk-info created

 

이렇게 뜨네요 이럼 된 것 같은데..

 

혹시 처음 배포할 때 어댑터 2를 일부러 사용하지 않음 처리해서 배포하신게 이유가 있지 않으시다면 임의로 저렇게 설정 변경해서 구성해도 될까요?

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

어댑터2를 의도적으로 사용하지 않음으로 처리한게 아니라...

어댑터2는 Host only network로 처리되어 나갔는데 현재 구성되지 않아서

사용하지 않음으로 올라가는거 같습니다.

(영상에도 호스트 전용 네트워크 따로 구성이 필요하다고 얘기했을꺼에요)

 

NAT가 아니라 호스트 전용 네트워크로 구성되어야 하고 NAT로 구성할 때 CNI 등 네트워크 통신에 문제가 있을 수 있습니다.

(대부분의 경우는 문제가 안 생길꺼 같기도 한데... 테스트된 건 아니고, 어댑터1은 인터넷 연결용 어댑터2는 내부 클러스터 통신 및 호스트와의 통신 전용으로 설계하였습니다.)

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

현재로서 (골치가 아프실꺼 같아서 --) 사용해 보시고 문제 있으면 호스트 전용 네트워크를 구성하시는걸 생각해 보시는 것도 방법일꺼 같기도 하네요...

2romade님의 프로필 이미지
2romade
질문자

네 무튼 인증서와 네트워크를 해결하니 잘 되는것 같습니다. 긴 시간 감사합니다.

0

2romade님의 프로필 이미지
2romade
질문자

안녕하세요. 일단 말씀해주신 새 ova 파일을 받고 테스트 했는데 뭔가 반은 해결된 것 같고 반은 그대로인것 같습니다.

kubectl get nodes 명령어 결과는 아직 그대로인 것 같고, api 상태나 포트는 올라와있는것으로 변경된 것 확인했습니다.

 

 

root@cp-k8s:~# kubectl get nodes                                                          

E0104 18:03:37.957653 742 memcache.go:265] couldn't get current server API group list:

Get "https://192.168.1.10:6443/api?timeout=32s": dial tcp 192.168.1.10:6443: i/o timeout

^C

 

 

root@cp-k8s:~# ps -ef | grep kube-apiserver

root 983 778 43 18:03 ? 00:00:02 kube-apiserver --advertise-address=192

.168.1.10 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kub

ernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-aut

h=true --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt --etcd-certfile=/etc/kubernetes/pki/a

piserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key --et

cd-servers=https://127.0.0.1:2379 --kubelet-client-certificate=/etc/kubernetes/pki/apiserv

er-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.ke

y --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-fil

e=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/f

ront-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-cli

ent-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-

Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-header

s=X-Remote-User --secure-port=6443 --service-account-issuer=https://kubernetes.default.svc

.cluster.local --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-account-sig

ning-key-file=/etc/kubernetes/pki/sa.key --service-cluster-ip-range=10.96.0.0/12 --tls-cer

t-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiser

ver.key

root 1092 733 0 18:03 pts/0 00:00:00 grep --color=auto kube-apiserver

 

 

root@cp-k8s:~# netstat -ntlp | grep 6443

tcp 0 0 0.0.0.0:6443 0.0.0.0:* LISTEN 983/kube-a

piserver

 

 

root@cp-k8s:~# systemctl status kubelet

kubelet.service - kubelet: The Kubernetes Node Agent

Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)

Drop-In: /usr/lib/systemd/system/kubelet.service.d

└─10-kubeadm.conf

Active: active (running) since Sun 2026-01-04 18:02:50 KST; 1min 26s ago

Docs: https://kubernetes.io/docs/

Main PID: 575 (kubelet)

Tasks: 12 (limit: 2314)

Memory: 95.8M

CPU: 4.779s

CGroup: /system.slice/kubelet.service

└─575 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kube>

Jan 04 18:03:59 cp-k8s kubelet[575]: E0104 18:03:59.920260 575 event.go:368] "Unable >

Jan 04 18:04:00 cp-k8s kubelet[575]: E0104 18:04:00.185835 575 controller.go:145] "Fa>

Jan 04 18:04:04 cp-k8s kubelet[575]: E0104 18:04:04.167992 575 eviction_manager.go:28>

Jan 04 18:04:04 cp-k8s kubelet[575]: I0104 18:04:04.196400 575 scope.go:117] "RemoveC>

Jan 04 18:04:04 cp-k8s kubelet[575]: E0104 18:04:04.197618 575 pod_workers.go:1298] ">

Jan 04 18:04:05 cp-k8s kubelet[575]: I0104 18:04:05.217925 575 scope.go:117] "RemoveC>

Jan 04 18:04:05 cp-k8s kubelet[575]: E0104 18:04:05.219342 575 pod_workers.go:1298] ">

Jan 04 18:04:14 cp-k8s kubelet[575]: E0104 18:04:14.186167 575 eviction_manager.go:28>

Jan 04 18:04:16 cp-k8s kubelet[575]: E0104 18:04:16.778839 575 controller.go:145] "Fa>

Jan 04 18:04:17 cp-k8s kubelet[575]: I0104 18:04:17.037646 575 scope.go:117] "RemoveC>

lines 1-23/23 (END)

^C

 

 

root@cp-k8s:~# journalctl -u kubelet -xe

Jan 04 18:03:56 cp-k8s kubelet[575]: I0104 18:03:56.998400 575 scope.go:117] "RemoveC>

Jan 04 18:03:57 cp-k8s kubelet[575]: E0104 18:03:57.009098 575 pod_workers.go:1298] ">

Jan 04 18:03:57 cp-k8s kubelet[575]: I0104 18:03:57.999163 575 scope.go:117] "RemoveC>

Jan 04 18:03:58 cp-k8s kubelet[575]: E0104 18:03:57.999941 575 pod_workers.go:1298] ">

Jan 04 18:03:59 cp-k8s kubelet[575]: E0104 18:03:59.920260 575 event.go:368] "Unable >

Jan 04 18:04:00 cp-k8s kubelet[575]: E0104 18:04:00.185835 575 controller.go:145] "Fa>

Jan 04 18:04:04 cp-k8s kubelet[575]: E0104 18:04:04.167992 575 eviction_manager.go:28>

Jan 04 18:04:04 cp-k8s kubelet[575]: I0104 18:04:04.196400 575 scope.go:117] "RemoveC>

Jan 04 18:04:04 cp-k8s kubelet[575]: E0104 18:04:04.197618 575 pod_workers.go:1298] ">

Jan 04 18:04:05 cp-k8s kubelet[575]: I0104 18:04:05.217925 575 scope.go:117] "RemoveC>

Jan 04 18:04:05 cp-k8s kubelet[575]: E0104 18:04:05.219342 575 pod_workers.go:1298] ">

Jan 04 18:04:14 cp-k8s kubelet[575]: E0104 18:04:14.186167 575 eviction_manager.go:28>

Jan 04 18:04:16 cp-k8s kubelet[575]: E0104 18:04:16.778839 575 controller.go:145] "Fa>

Jan 04 18:04:17 cp-k8s kubelet[575]: I0104 18:04:17.037646 575 scope.go:117] "RemoveC>

Jan 04 18:04:17 cp-k8s kubelet[575]: I0104 18:04:17.857694 575 scope.go:117] "RemoveC>

Jan 04 18:04:17 cp-k8s kubelet[575]: I0104 18:04:17.859037 575 scope.go:117] "RemoveC>

Jan 04 18:04:17 cp-k8s kubelet[575]: E0104 18:04:17.859755 575 pod_workers.go:1298] ">

Jan 04 18:04:20 cp-k8s kubelet[575]: I0104 18:04:20.028284 575 scope.go:117] "RemoveC>

Jan 04 18:04:20 cp-k8s kubelet[575]: I0104 18:04:20.030469 575 scope.go:117] "RemoveC>

Jan 04 18:04:20 cp-k8s kubelet[575]: E0104 18:04:20.035034 575 pod_workers.go:1298] ">

Jan 04 18:04:24 cp-k8s kubelet[575]: E0104 18:04:24.191691 575 eviction_manager.go:28>

Jan 04 18:04:24 cp-k8s kubelet[575]: I0104 18:04:24.206879 575 scope.go:117] "RemoveC>

Jan 04 18:04:24 cp-k8s kubelet[575]: E0104 18:04:24.210842 575 pod_workers.go:1298] ">

Jan 04 18:04:24 cp-k8s kubelet[575]: I0104 18:04:24.212493 575 scope.go:117] "RemoveC>

Jan 04 18:04:24 cp-k8s kubelet[575]: E0104 18:04:24.213833 575 pod_workers.go:1298] ">

Jan 04 18:04:24 cp-k8s kubelet[575]: E0104 18:04:24.524448 575 kubelet_node_status.go>

Jan 04 18:04:25 cp-k8s kubelet[575]: I0104 18:04:25.339877 575 kubelet_node_status.go>

Jan 04 18:04:26 cp-k8s kubelet[575]: W0104 18:04:26.834142 575 reflector.go:547] k8s.>

Jan 04 18:04:26 cp-k8s kubelet[575]: I0104 18:04:26.835588 575 trace.go:236] Trace[13>

Jan 04 18:04:26 cp-k8s kubelet[575]: Trace[1326111383]: ---"Objects listed" error:Get "ht>

Jan 04 18:04:26 cp-k8s kubelet[575]: Trace[1326111383]: [30.21465485s] [30.21465485s] END

Jan 04 18:04:26 cp-k8s kubelet[575]: E0104 18:04:26.836778 575 reflector.go:150] k8s.>

Jan 04 18:04:26 cp-k8s kubelet[575]: W0104 18:04:26.856201 575 reflector.go:547] k8s.>

Jan 04 18:04:26 cp-k8s kubelet[575]: I0104 18:04:26.857476 575 trace.go:236] Trace[80>

Jan 04 18:04:26 cp-k8s kubelet[575]: Trace[801660039]: ---"Objects listed" error:Get "htt>

Jan 04 18:04:26 cp-k8s kubelet[575]: Trace[801660039]: [30.003630427s] [30.003630427s] END

Jan 04 18:04:26 cp-k8s kubelet[575]: E0104 18:04:26.857502 575 reflector.go:150] k8s.>

Jan 04 18:04:27 cp-k8s kubelet[575]: W0104 18:04:27.260236 575 reflector.go:547] k8s.>

Jan 04 18:04:27 cp-k8s kubelet[575]: I0104 18:04:27.261021 575 trace.go:236] Trace[10>

Jan 04 18:04:27 cp-k8s kubelet[575]: Trace[1055366097]: ---"Objects listed" error:Get "ht>

Jan 04 18:04:27 cp-k8s kubelet[575]: Trace[1055366097]: [30.146430352s] [30.146430352s] E>

Jan 04 18:04:27 cp-k8s kubelet[575]: E0104 18:04:27.261058 575 reflector.go:150] k8s.>

 

그 후 kubeadm certs check-expiration 하면 다음과 같이 보이는데..

Error reading configuration from the Cluster. Falling back to default configuration

 

root@cp-k8s:~# kubeadm certs check-expiration

[check-expiration] Reading configuration from the cluster...

[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get

cm kubeadm-config -o yaml'

[check-expiration] Error reading configuration from the Cluster. Falling back to default c

onfiguration

CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY

EXTERNALLY MANAGED

admin.conf Dec 28, 2035 05:49 UTC 9y ca

no

apiserver Dec 28, 2035 05:49 UTC 9y ca

no

apiserver-etcd-client Dec 28, 2035 05:49 UTC 9y etcd-ca

no

apiserver-kubelet-client Dec 28, 2035 05:49 UTC 9y ca

no

controller-manager.conf Dec 28, 2035 05:49 UTC 9y ca

no

etcd-healthcheck-client Dec 28, 2035 05:49 UTC 9y etcd-ca

no

etcd-peer Dec 28, 2035 05:49 UTC 9y etcd-ca

no

etcd-server Dec 28, 2035 05:49 UTC 9y etcd-ca

no

front-proxy-client Dec 28, 2035 05:49 UTC 9y front-proxy-ca

no

scheduler.conf Dec 28, 2035 05:49 UTC 9y ca

no

super-admin.conf Dec 28, 2035 05:49 UTC 9y ca

no

CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED

ca Dec 28, 2035 05:48 UTC 9y no

etcd-ca Dec 28, 2035 05:48 UTC 9y no

front-proxy-ca Dec 28, 2035 05:48 UTC 9y no

root@cp-k8s:~#

 

일단 제가 여기서 추가로 더 놓치고 있는 부분이 있을까요?

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

음...2가지가 있는데요.

  1. 충분히 기다려 보셨을까요? 5-10분?

  2. 그래도 안된다면 현재 랩탑의 사양의 이슈로 api-server와 etcd가 모두 올라오지 못하는 이슈가 발생하는 것 같습니다. 해당 내용을 여길 확인해 보시고 점검해 보실 수 있을 것 같습니다. https://inf.run/SKvWv

     

2romade님의 프로필 이미지
2romade
질문자

  1. 충분히 기다렸냐는 말씀이 무슨말씀이신지 궁금합니다. vm기동 시간도, 명령어 치고 나서 타임아웃 나기까지 기다린시간도 말씀하신 시간과 동일하게 기다렸습니다.

  2. 말씀하신 성능 관련하여서는 제 랩탑 성능이 그렇게 문제되지 않을 것 같은데, 전문가분께서 보시기엔 어떨지 모르겠습니다.

     

    CPU: AMD Ryzen AI 시리즈 / RAM: 32GB / 저장장치: NVMe SSD 1TB / GPU: AMD 내장 그래픽 / OS: Windows 11

     

  3. kubeadm certs check-expiration 했을때의 추가 에러는 지금 상황과 별개의 에러인가요?

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요

  1. 충분히 라는 말은 그러니까 VM이 올라오고 끝이 아니라 VM 상에서 동작하는 컨테이너들이 올라와서 통신이 되어 모두 up 상태가 되어야 하는 시간을 의미합니다. 이건 2번과도 연결됩니다.

  2. 성능이라는게 단순히 CPU와 메모리가 충분하다가 아니라, 환경에 따라(호스트의 OS 커널, 네트워크 등 모두를 포함함 / 보통 CPU가 이슈라서 CPU를 주로 언급하긴 했음) 컨테이너가 올라오고 해당 컨테이너들의 통신이 이루어질 때까지 api-server와 etcd가 유지가 되어야 합니다. 위의 링크를 보시면 crictl 로 해당 부분을 확인하는 것을 보실 수 있고, 2개가 모두 올라와 있지 않아서 서로 동기화할 수 없기 때문에 계속 내려갔다 올라가는 것이 반복됩니다. 즉 쿠버네티스 클러스터 구성 중에 Control-Plane이 정상 동작하지 않습니다. 관련 내용의 위의 링크를 읽어보시는게 가장 좋으실 것 같습니다.

  3. 네 해당 부분은 해결되었고, 지금은 api-server와 etcd가 모두 올라오지 않는 것으로 추정되는데... 이게 쉽지가 않아서....


    crictl logs $(crictl ps -a | awk '/etcd/ {print $1}')
    주시면 살펴 보겠지만, etcd 로그를 봐서 100% 해결된다고 보장하기는 어렵습니다.




    그러고 보니...아래와 같이 처음에 얘기하셨는데, 잘 받아진다 잘 안 받아진다? 이 부분이 좀 의심이 되기도 하네요. 예전에 좀 오래되긴 했는데, ssd의 특정 펌웨어 + evo에 절전 모드로 성능이 나오지 않아 vagrant up에 대한 timeout이 자주 발생하긴 했었습니다.

    일단 초기 구축 시 어떤 VM은 받아지고 어떤 VM은 잘 안받아져서 탑재해주신 OVA 파일로 내려받아 실습환경을 구성하고자 하였습니다.

    지금도 OVA 이후에 container를 로드할 때 디스크의 성능이 안 나오는거 아닌가? 하는 의심도 살짝 듭니다.

다른 랩탑이 있다면 거기서는 잘 되실꺼 같기도 하고 MacBook은 거의 균일한 하드웨어를 써서 거기서는 문제가 발생하지 않으실 겁니다.

0

2romade님의 프로필 이미지
2romade
질문자

안녕하세요 친절한 답변 감사드립니다.

일단 기존에 받아뒀다는 개념이 무슨 말인지 모르겠으나, 엊그제 처음 ova 파일을 받았고, 수업 노트에 탑재된 링크를 클릭하면 onedrive 2024년 6월 5일 modified 된 ova 파일로 연결되어 그걸 받았습니다.

또한 명령어 내용 공유드립니다.
root@cp-k8s:~# kubeadm certs check-expiration

[check-expiration] Reading configuration from the cluster...

[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get

cm kubeadm-config -o yaml'

[check-expiration] Error reading configuration from the Cluster. Falling back to default c

onfiguration

CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY

EXTERNALLY MANAGED

admin.conf Jun 01, 2034 00:40 UTC 8y ca

no

apiserver Jun 01, 2034 00:40 UTC 8y ca

no

apiserver-etcd-client Jun 01, 2034 00:40 UTC 8y etcd-ca

no

apiserver-kubelet-client Jun 01, 2034 00:40 UTC 8y ca

no

controller-manager.conf Jun 01, 2034 00:40 UTC 8y ca

no

etcd-healthcheck-client Jun 01, 2034 00:40 UTC 8y etcd-ca

no

etcd-peer Jun 01, 2034 00:40 UTC 8y etcd-ca

no

etcd-server Jun 01, 2034 00:40 UTC 8y etcd-ca

no

front-proxy-client Jun 01, 2034 00:40 UTC 8y front-proxy-ca

no

scheduler.conf Jun 01, 2034 00:40 UTC 8y ca

no

super-admin.conf Jun 01, 2034 00:40 UTC 8y ca

no

CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED

ca Jun 01, 2034 00:40 UTC 8y no

etcd-ca Jun 01, 2034 00:40 UTC 8y no

front-proxy-ca Jun 01, 2034 00:40 UTC 8y no

 

감사합니다.

0

2romade님의 프로필 이미지
2romade
질문자

안녕하세요 제가 잘 이해한 것이 맞다면
1. 수업 노트에 있는 해당 OVA를 다운받았습니다. OVA: 2.3(v1.30.0)


2. 이거는 업무 이후 퇴근하여 확인해서 알려드리겠습니다. 감사합니다.

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

이름은 같을 수 있는데

언제인지 기억나진 않지만

인증서 문제가(기본 1년) 생길꺼 같아서 교체했거든요.

기존에 받아두신 걸 사용하신거라면

다시 받아서 진행하시는걸 추천드립니다.

명령어도 수행해 보고 말씀 부탁드려요 😊

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요 

 

확인해 보니... kubelet에 대한 인증서는 kubeadm에서 관리하고 있지 않아 발생한 문제였습니다. 

 

root@cp-k8s:~# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

notBefore=Nov 26 00:51:21 2025 GMT

notAfter=Nov 26 00:56:23 2026 GMT

 

>>> 여길 보시면 1년 

 

root@cp-k8s:~# kubeadm certs check-expiration

[check-expiration] Reading configuration from the cluster...

[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'

 

CERTIFICATE                EXPIRES                  RESIDUAL TIME   CERTIFICATE AUTHORITY   EXTERNALLY MANAGED

admin.conf                 Nov 24, 2035 00:56 UTC   9y              ca                      no      

apiserver                  Nov 24, 2035 00:56 UTC   9y              ca                      no      

apiserver-etcd-client      Nov 24, 2035 00:56 UTC   9y              etcd-ca                 no      

apiserver-kubelet-client   Nov 24, 2035 00:56 UTC   9y              ca                      no      

controller-manager.conf    Nov 24, 2035 00:56 UTC   9y              ca                      no      

etcd-healthcheck-client    Nov 24, 2035 00:56 UTC   9y              etcd-ca                 no      

etcd-peer                  Nov 24, 2035 00:56 UTC   9y              etcd-ca                 no      

etcd-server                Nov 24, 2035 00:56 UTC   9y              etcd-ca                 no      

front-proxy-client         Nov 24, 2035 00:56 UTC   9y              front-proxy-ca          no      

scheduler.conf             Nov 24, 2035 00:56 UTC   9y              ca                      no      

super-admin.conf           Nov 24, 2035 00:56 UTC   9y              ca                      no      

 

CERTIFICATE AUTHORITY   EXPIRES                  RESIDUAL TIME   EXTERNALLY MANAGED

ca                      Nov 24, 2035 00:56 UTC   9y              no      

etcd-ca                 Nov 24, 2035 00:56 UTC   9y              no      

front-proxy-ca          Nov 24, 2035 00:56 UTC   9y              no

 

>>> 여길 보시면 10년

 

일반적으로 kubelet의 인증서는 자동으로 갱신하도록 설정되어 있어서 문제가 발생하지 않습니다. 

 

root@cp-k8s:~# grep rotateCertificates /var/lib/kubelet/config.yaml                                                                                                                     

rotateCertificates: true   

 

다만 사용자의 편의를 위해 OVA 형태로 이걸 작성해 놓다 보니 1년이 그냥 넘어갔고...

그 뒤로 인증서가 이미 만료된 상태에서는 갱신되지 않으니 문제가 발생한 것입니다. 

 

어떻게 해결할까 고민 중인데...

 

현재 버전이 v1.30.x 이기 때문에 kubeadm으로 kubelet 자체의 기간을 늘리는게 어려워서 

openssl로 직접 kubelet의 인증서를 늘리는 방향으로 진행했습니다. 

해당 내용은 실제 저장소에는 반영하지 않았고, 따로 OVA에만 적용할 예정입니다. 

 

참고 하시기 바라며, 다시 OVA파일을 내려 받으시면 될텐데, 작업을 마치면 댓글로 달아놓도록 하겠습니다. 

 

좋은 내용을 알려주셔서 감사합니다. 

조훈 드림. 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

kubelet 인증서를 10년으로 늘리고 해당 내용으로 ova를 만들어서 업로드하였습니다.

시간 되실 때 확인 부탁드려요.

0

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요

어...인증서 10년으로 짜리로 만들고 그걸 ova로

만든 것 같은데... 테스트하고 확인 조치를 혹시 화요일까지 해도 괜찮을까요?

지금 가용한 인텔 랩탑이 없어서요.

양해 부탁드립니다.

2romade님의 프로필 이미지
2romade
질문자

안녕하세요

안그래도 journalctl로 확인한 내용 찾다보니 kubelet이 사용할 인증서가 만료되었거나, bootstrap kubeconfig 파일이 없어서 실행에 실패하는 상황이여서 kubelet이 계속 재시작하다가 죽고, API 서버도 뜨지 않는 현상일 수 있다고 확인하였습니다.

네 시간 되시는대로 확인 부탁드립니다. 빠른 회신 감사합니다 :)

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

확인을 해 봤는데 인증서 10년이 맞아서요 (예전 파일로 하시려나...?)

혹시 이 명령어 cp-k8s에서 실행해 봐주실 수 있을까요?

kubeadm certs check-expiration

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

위의 2가지 내용 확인 부탁드려요.

  1. 새로 내려받은 ova로 한 것인지

  2. 위의 명령어로 확인한 인증서 기간

확인을 해야 현상을 좀 더 파악할 수 있을 것 같습니다.

2romade님의 프로필 이미지
2romade

작성한 질문수

질문하기