k3s HA 구성

2025. 11. 21. 23:10·인프라/Kubernetes
반응형

k3s 3개 노드로 구성하고 나서 가만히 보니 뭔가 부족해 보였다.

실제 샘플 pod 를 띄우고 강제로 node 를 하나씩 죽여다가 살려봤는데 살아나지 않는 경우도 있고..

뭔가 이상해서 찾아봤다

 

결론적으로 master node 의 HA 구성이 안된것이다.

보통 3개를 설치하면 3개 노드 모두 master 를 설치하여 그들간의 고가용성을 유지한다고 하는데 빠져 있었다.

이미 설치가 완료된 k3s 클러스터를 한번 바꿔보려고 한다.

 

root@k3s-node1:~# kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
k3s-node1   Ready    control-plane,master   45h   v1.33.5+k3s1
k3s-node2   Ready    <none>                 45h   v1.33.5+k3s1
k3s-node3   Ready    <none>                 45h   v1.33.5+k3s1
root@k3s-node1:~#

 

워커노드 제거

# 1. k3s-node2의 파드를 다른 노드로 옮김 (현재는 k3s-node1로 이동)
sudo kubectl drain k3s-node2 --ignore-daemonsets --delete-emptydir-data

# 2. 클러스터 메타데이터에서 k3s-node2 삭제
sudo kubectl delete node k3s-node2

# 3. k3s-node3에 대해서도 반복
sudo kubectl drain k3s-node3 --ignore-daemonsets --delete-emptydir-data
sudo kubectl delete node k3s-node3

위와 같이 하면 

root@k3s-node1:~# kubectl drain k3s-node2 --ignore-daemonsets --delete-emptydir-data
node/k3s-node2 cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/svclb-traefik-fd17bbb8-wqm8p, metallb-system/speaker-4hm7x
evicting pod metallb-system/controller-654858564f-46kh4
evicting pod default/ggmoney-web-deployment-6b84976564-qkqmm
evicting pod default/nginx-deployment-96b9d695-lpv4f
evicting pod default/nginx-deployment-96b9d695-wg87m
evicting pod kube-system/helm-install-traefik-g4x56
pod/helm-install-traefik-g4x56 evicted
pod/controller-654858564f-46kh4 evicted
pod/ggmoney-web-deployment-6b84976564-qkqmm evicted
pod/nginx-deployment-96b9d695-lpv4f evicted
pod/nginx-deployment-96b9d695-wg87m evicted
node/k3s-node2 drained
root@k3s-node1:~# sudo kubectl delete node k3s-node2
node "k3s-node2" deleted
root@k3s-node1:~# sudo kubectl drain k3s-node3 --ignore-daemonsets --delete-emptydir-data
node/k3s-node3 cordoned
Warning: ignoring DaemonSet-managed Pods: kube-system/svclb-traefik-fd17bbb8-7h8tw, metallb-system/speaker-w5k89
evicting pod metallb-system/controller-654858564f-zchbk
evicting pod default/ggmoney-web-deployment-6b84976564-2qczp
evicting pod default/nginx-deployment-96b9d695-d6jdq
evicting pod default/nginx-deployment-96b9d695-q9zz7
evicting pod kube-system/traefik-77dc7b444-s6vdb
pod/controller-654858564f-zchbk evicted
pod/ggmoney-web-deployment-6b84976564-2qczp evicted
pod/nginx-deployment-96b9d695-q9zz7 evicted
pod/nginx-deployment-96b9d695-d6jdq evicted
pod/traefik-77dc7b444-s6vdb evicted
node/k3s-node3 drained
root@k3s-node1:~# sudo kubectl delete node k3s-node3
node "k3s-node3" deleted
root@k3s-node1:~#

이런식으로 삭제 된다.

 

워커 노드에서 k3s Agent 서비스 중지 및 삭제

각 워커 노드(k3s-node2, k3s-node3)에 SSH로 접속하여 k3s Agent 서비스를 완전히 중지하고 설치된 파일을 제거

sudo /usr/local/bin/k3s-agent-uninstall.sh

HA 서버로 재설치 (k3s-node2, k3s-node3)

root@k3s-node1:~# sudo cat /var/lib/rancher/k3s/server/node-token
K102e2edeaeb6ed7a830352628232ddd585f04e2f9e8cb748672eeeb9c9d75f80cb::server:7c1fea101a572cae30a0bf0a5b94c87d

토큰 가져오고

2, 3번 노드에서 설치

# k3s-node2 또는 k3s-node3에서 실행
curl -sfL https://get.k3s.io | sh -s - server \
    --server https://10.34.1.151:6443 \
    --token K102e2edeaeb6ed7a830352628232ddd585f04e2f9e8cb748672eeeb9c9d75f80cb::server:7c1fea101a572cae30a0bf0a5b94c87d
    
    
    
    root@k3s-node2:~# curl -sfL https://get.k3s.io | sh -s - server \
    --server https://10.34.1.151:6443 \
    --token K102e2edeaeb6ed7a830352628232ddd585f04e2f9e8cb748672eeeb9c9d75f80cb::server:7c1fea101a572cae30a0bf0a5b94c87d
[INFO]  Finding release for channel stable
[INFO]  Using v1.33.5+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.33.5+k3s1/sha256sum-amd64.txt
[INFO]  Skipping binary downloaded, installed k3s matches hash
[INFO]  Skipping installation of SELinux RPM
[INFO]  Skipping /usr/local/bin/kubectl symlink to k3s, already exists
[INFO]  Skipping /usr/local/bin/crictl symlink to k3s, already exists
[INFO]  Skipping /usr/local/bin/ctr symlink to k3s, already exists
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  No change detected so skipping service start
root@k3s-node2:~#

이미 한번 설치를 했어서 그런지...

already 라는 문구들이 나온다.

일단 잘되었는지 확인해보자.

root@k3s-node1:~# kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
k3s-node1   Ready    control-plane,master   45h   v1.33.5+k3s1
root@k3s-node1:~#

잘 안돼었다.

 

검색을 해보니..

node 1번부터 잘되었다고 나온다.

왜냐하면 single server 로 설치를 했다고 한다.

그래서 모두 지우고 다시 하라고 하네...ㅠ.ㅠ...

 

다시 해보자. 일단 설정 파일들 git 푸시좀 하고 다시 해봐야겠다.

 

이것저것 몇번을 하다보니 한가지 etcd 를 위한 방화벽 포트가 열리지 않은것 을 확인했다.

sudo ufw allow from 10.34.1.0/24 to any port 2379:2380 proto tcp
sudo ufw allow from 10.34.1.0/24 to any port 6443 proto tcp
sudo ufw allow from 10.34.1.0/24 to any port 10250 proto tcp

sudo ufw reload
sudo ufw status

 

그리고 재설치 하는데 한번에 되지 않는다..ㅠ.ㅠ

여러번 오류 로그를 봐가면서 지웠다 설치했다를 반복했다.

 

중간에 etcd 가 등록되었는데 node 등록은 안되서 etcd 삭제하고... 여러 과정을 다시 했다.

root@k3s-node1:~# ETCDCTL_API=3 etcdctl   --endpoints=https://127.0.0.1:2379   --cacert=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt   --cert=/var/lib/rancher/k3s/server/tls/etcd/server-client.crt   --key=/var/lib/rancher/k3s/server/tls/etcd/server-client.key   member list -w table
+------------------+---------+--------------------+--------------------------+--------------------------+------------+
|        ID        | STATUS  |        NAME        |        PEER ADDRS        |       CLIENT ADDRS       | IS LEARNER |
+------------------+---------+--------------------+--------------------------+--------------------------+------------+
|  16b718b0e73909f | started | k3s-node2-745c8aec | https://10.34.1.152:2380 | https://10.34.1.152:2379 |      false |
|  b27b351149a56d3 | started | k3s-node3-ff81adc7 | https://10.34.1.153:2380 | https://10.34.1.153:2379 |       true |
| b43c7edca9206551 | started | k3s-node1-bc986d48 | https://10.34.1.151:2380 | https://10.34.1.151:2379 |      false |
+------------------+---------+--------------------+--------------------------+--------------------------+------------+
root@k3s-node1:~#

실제 이렇게 되면 잘된것 같다.

중간과정에서 node3 가 비정상 동작해서 강제로 저걸 지우고 다시 3번 노드에서 설치하고... 이런과정을 여러번 거쳤다.

 

root@k3s-node1:~# kubectl get nodes
NAME        STATUS   ROLES                       AGE   VERSION
k3s-node1   Ready    control-plane,etcd,master   31m   v1.33.5+k3s1
k3s-node2   Ready    control-plane,etcd,master   30m   v1.33.5+k3s1
k3s-node3   Ready    control-plane,etcd,master   82s   v1.33.5+k3s1
root@k3s-node1:~#

결과적으로 이렇게 모두 master 모드로 설치했다.

이제 마스터이면서 worker 로 동작하겠지?

반응형

'인프라 > Kubernetes' 카테고리의 다른 글

k3s 설치하기 (마스터1, 워커2 설치)  (0) 2025.11.17
'인프라/Kubernetes' 카테고리의 다른 글
  • k3s 설치하기 (마스터1, 워커2 설치)
GG.Lab
GG.Lab
GG.Lab
    반응형
  • GG.Lab
    GG.Lab
    GG.Lab
  • 전체
    오늘
    어제
    • 분류 전체보기 (41) N
      • APP (25)
        • 함쓰가계부 (22)
        • 랭킹구구단 (3)
      • 인프라 (10) N
        • Docker (1)
        • Proxmox (4)
        • Kubernetes (2) N
        • Network (3) N
      • DB (5)
        • Postgresql (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 함쓰 메뉴얼
    • 함쓰 카페
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스피드구구단
    푸시인식
    sms자동등록
    serial컬럼중복
    함쓰
    함께쓰는가계부
    pfsense
    커플가계부
    자작앱
    가계부공유
    가계부편의기능
    구구단
    k3s
    앱출시
    해외통화가계부
    실적자동푸시
    연인가계부
    Proxmox
    공유가계부
    Flutter
    푸시인식가계부
    가족가계부
    함쓰가계부
    sms인식가계부
    부부가계부
    플러터
    문자자동인식
    랭킹구구단
    문자자동인식가계부
    해외통화지원
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
GG.Lab
k3s HA 구성
상단으로

티스토리툴바