• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

Pod가 떠있는 Worker Node의 metric만 모니터링되는 이슈

22.02.20 18:14 작성 조회수 314

1

파드가 떠있는 노드의 메트릭에만 모니터링이 되고있습니다.

구글링 해서 스스로 해결해보려고 했으나, 

강사님이 말씀해주신 아래 두가지 옵션에 대한 정보만 있더라구요...

(혹시 설치가 잘못된건가 해서 5번은 다시 설치도 해본거 같아요 ㅠㅠㅠㅠ)

insecure-tls,

- --kubelet-preferred-address-types=InternalIP

 

혹여나 host파일이 문제가 있을까 했지만,

master, node1, node2 모두 아이피, 도메인 이름,  호스트이름이 정상적으로 매핑되어 있습니다.

 

사용하는 k8s 버전은 1.15입니다.

 

 

 

수정한 component.yaml 

 

메트릭 파드 log

E0220 09:04:22.329600 1 reststorage.go:135] unable to fetch node metrics for node "k8s-node1": no metrics known for node
E0220 09:04:22.329622 1 reststorage.go:135] unable to fetch node metrics for node "k8s-master": no metrics known for node
E0220 09:04:23.330558 1 reststorage.go:135] unable to fetch node metrics for node "k8s-master": no metrics known for node
E0220 09:04:23.330580 1 reststorage.go:135] unable to fetch node metrics for node "k8s-node1": no metrics known for node
E0220 09:04:23.857976 1 reststorage.go:135] unable to fetch node metrics for node "k8s-node1": no metrics known for node
E0220 09:04:23.858000 1 reststorage.go:135] unable to fetch node metrics for node "k8s-master": no metrics known for node
E0220 09:04:24.434955 1 reststorage.go:135] unable to fetch node metrics for node "k8s-node1": no metrics known for node
E0220 09:04:24.434980 1 reststorage.go:135] unable to fetch node metrics for node "k8s-master": no metrics known for node

답변 3

·

답변을 작성해보세요.

0

gilho Lee님의 프로필

gilho Lee

질문자

2022.02.21

강사님 추가로 질문드리자면,,,

vagrant 로 설치하면 노드간 통신이 불가능한데, 해결방법을좀 알수있을까요

요근래 몇일간 같은 이슈를 앓고있네요 .....

 

예시. 

k8s-node1에 파드 생성, nodeport로 서비스 생성 : externalTrafficPolicy = Cluster

외부에서 k8s-master 접근시 접근 불가 

파드가 떠있는 노드의 ip주소로만 접근가능

안녕하세요.

고생 많으십니다. 네트워크가 제일 어려운 부분인거 같아요 ㅎ

끝까지 개념 파악을 위한 공부하시길 바라고요.

아무래도 VirtualBox에서 세팅하는 네트워크 모드들과 그 모드들에 대한 통신방식이 어떠한지 확실히 이해하시면 좋을것 같습니다.

아래 블로그 참조해보시고요.

https://technote.kr/213

읽어보셨다는 가정하에 계속 설명드리면,

제 가이드상에 1.15버전 설치는 브리지 모드입니다. 공유기에서 할당해주는 IP를 바로 쓰는 형태라.

테스크탑에서 VM을 또 생성하는 형태지만, 다 같은 레벨에 IP를 할당받고, 서로간에 통신이 원할합니다.

그래서 1.15버전의 가이드로 설치를 하셨는데, 10.0.3.30의 IP를 master에서 갖고 있을 수 없습니다.

혹시 VM만들때 다른 네트워크 모드가 추가로 설정됐는지 확인이 필요할 것 같아요.

그리고 위에 주신 질문 역시, 어떤 네트워크 모드를 사용했는가에 따라 연결이 안되는 상태일 수도 있습니다.

 

 

 

 

 

gilho Lee님의 프로필

gilho Lee

질문자

2022.02.23

감사합니다. 

반가상화 네트워크에 대해 깊이 새로 알게되었어요 ! 

 

 

추가로 위 문제는 강의를 끝까지 들어보니 이해가 되었어요

calico 아이디 설정 대역대와 cluster 아이피 설정 대역이 다르게 잡혀있었습니다.

그래서 결국 iptable쪽에서 문제가 있던것으로 보이고

calico 아이피 설정 대역을 cluster와 동일하게 맞추니 해결되었습니다.

 

해결에 도움을 주셔서 감사드립니다.

0

gilho Lee님의 프로필

gilho Lee

질문자

2022.02.21

kubectl get nodes -o wide 했을땐 모두 레디상태고,

Internal IP는 아래와같았습니다. 버젼은 모두 1.15.5로 동일했었구요.

k8s-master Internal IP 192.168.56.30

k8s-node1 Internal IP 192.168.56.31

k8s-node2 Internal IP 192.168.56.32

 

https://www.inflearn.com/questions/59570

질문 글을 보고 hosts 파일을 변경하여 해결했는데요,

다만 hosts 파일을 아래와 같이 변경하는게 이해가 가지 않습니다.

ifconfig 를 해서 현재 할당된 ip 현황을 봐도 10.0.3.x에 대한 내용은 어디에도 없는 것 같아서요.

 

AS-Is

192.168.56.30 k8s-master
192.168.56.31 k8s-node1
192.168.56.32 k8s-node2

TO-be (해결한 hosts파일)

10.0.3.30 k8s-master
10.0.3.31 k8s-node1
10.0.3.32 k8s-node2

 

참고로 제 네트워크 구성도는 아래와 같습니다.


추가로 1.15 버전을 vagrant로 설치하는 스크립트 첨부해두었으니, 

혹 저와 같은 트러블을 겪는 분들에게 도움이 되었으면 좋겠습니다.

Vagrantfile

 

NodeCnt = 2

Vagrant.configure("2") do |config|

#  config.vbguest.installer_options = { allow_kernel_upgrade: true }
  config.vm.box = "centos/7"

  config.vm.provider :virtualbox do |vb|
    vb.memory = 3072
    vb.cpus = 4
  end

  config.vm.provision :shell, privileged: true, inline: $install_common_tools

  config.vm.define "k8s-master" do |master|
    master.vm.hostname = "k8s-master"
    master.vm.network "private_network", ip: "192.168.56.30"
    master.vm.provision :shell, privileged: true, inline: $provision_master_node
  end

  (1..NodeCnt).each do |i|
    config.vm.define "k8s-node#{i}" do |node|
      node.vm.hostname = "k8s-node#{i}"
      node.vm.network "private_network", ip: "192.168.56.#{i + 30}"
    end
  end



end

$install_common_tools = <<-SHELL

# ssh password 접속 활성화
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config;
systemctl restart sshd.service

# 방화벽 해제
systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager

# Swap 비활성화
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

# br_netfilter 모듈 로드
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# Iptables 커널 옵션 활성화
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

# permissive 모드로 SELinux 설정(효과적으로 비활성화)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 쿠버네티스 YUM Repository 설정
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

# Centos Update
yum -y update

# Hosts 등록
cat << EOF >> /etc/hosts
10.0.3.30 k8s-master
10.0.3.31 k8s-node1
10.0.3.32 k8s-node2
EOF

# 도커 설치
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum update -y && yum install -y docker-ce-18.06.2.ce


mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d

# 도커 재시작
systemctl daemon-reload
systemctl enable --now docker


# 쿠버네티스 설치
yum install -y --disableexcludes=kubernetes kubeadm-1.15.5-0.x86_64 kubectl-1.15.5-0.x86_64 kubelet-1.15.5-0.x86_64
systemctl enable --now kubelet

SHELL



$provision_master_node = <<-SHELL

# 쿠버네티스 초기화 명령 실행
kubeadm init --apiserver-advertise-address 192.168.56.30 --pod-network-cidr=20.96.0.0/12
kubeadm token create --print-join-command > ~/join.sh

# 환경변수 설정
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# Kubectl 자동완성 기능 설치
yum install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

# Calico 설치
curl -O https://docs.projectcalico.org/v3.9/manifests/calico.yaml
sed s/192.168.0.0\\/16/20.96.0.0\\/12/g -i calico.yaml
kubectl apply -f calico.yaml

# Dashboard 설치
kubectl apply -f https://kubetm.github.io/documents/appendix/kubetm-dashboard-v1.10.1.yaml
nohup kubectl proxy --port=8001 --address=192.168.56.30 --accept-hosts='^*$' >/dev/null 2>&1 &

SHELL

 

 

0

쉽지 않은 상황이네요...

일단 Metrics Server에서 Master 노드랑 Node1에 연결이 안되는게 문제인거 같은데,

아래 내용처럼 수정해보시고요.

- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname

그리고 kubectl get nodes -o wide를 했을때 결과가 어떻게 나오시나요?

 

gilho Lee님의 프로필

gilho Lee

질문자

2022.02.21

문의 내용이 길어서 아래 답글로 문의 남겨두었습니다.

답변 감사드립니다 

gilho Lee님의 프로필

gilho Lee

질문자

2022.02.22

추가로 답변주신 
ExternalIP, Hostname 옵션 추가시 정상 접속 확인됩니다.
감사합니다.