[API 05] 클러스터 노드 (Cluster Node) 작업

mimic1995·2025년 3월 27일

Proxmox API

목록 보기
5/6

복습

이전 내역들을 복기하자면 아래와 같습니다.
Proxmox는 계정, 역할, 인증 방식을 분류할 수 있습니다.

계정

계정은 root 시스템 계정을 포함하여 운영체제 단에서 관리하는 pam과 Proxmox Manager 단에서 관리하는 pve가 있습니다. 이는 계정명@ 뒤에 어느 것이 붙느냐에 따라 구분할 수 있습니다.

역할

제한된 권한이지만 일반적인 Proxmox VM 관리가 가능한 PVEAdmin과 모든 작업 수행이 가능하지만 보안을 철저히 관리해야 하는 Administrator 역할이 있습니다.
물론 이 외에도 세부적으로 실행 가능한 기능 별로 차이를 둔 다양한 역할들이 있으나 주로 두 개를 사용합니다.

인증 방식

유한하게 사용 가능한 Ticket과 CSRF Token을 이용한 세션 인증 방식, 무한하게 사용하지만 설정에 따라 만료 기간을 둘 수 있는 API Token 인증 방식이 있습니다.
주로 API Token 인증 방식을 사용하지만 기능이 인프라 단을 손대는 것이거나 필요 권한이 클수록 세션 인증 방식으로 root@pam 인증을 해야만 가능한 작업들도 있습니다.


클러스터 노드 작업

클러스터 노드는 API를 이용하여 수행할 때 제한이나 확인해야 하는 별도 작업이 많은 편입니다.
가능 여부만 파악했을 뿐 WEB UI나 터미널에서 전용 명령어를 통해 수행하는 것을 권유드립니다.

조회

Postman

https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes
항목
HTTP MethodGET
End Pointhttps://<proxmox_host>:8006/api2/json/nodes
Header인증 토큰
KeywordAuthorization
valuePVEAPIToken=계정명@인증방식!APItoken이름=Token_value
인증 방식API Token
역할PVEAdmin


CLI 명령어

pvesh get /nodes


cluster 인증서

PVE 인증서에는 pve-ssl.pem과 pve-root-ca.pem 두 개가 있습니다.
pve-ssl.pem : cluster node의 HTTPS 통신에 사용되는 SSL 인증서
pve-root-ca.pem : cluster 전체 root CA 인증서


클러스터 생성

클러스터 노드를 추가하기 위해서는 우선 클러스터를 생성해야 합니다.

Postman

https://pve.proxmox.com/pve-docs/api-viewer/index.html#/cluster/config

본 항목은 PVEAdmin 계정이나 root@pam 계정 권한을 상속받는 API Token 모두 사용 불가하며, root@pam 계정을 이용하여 세션인증해야 가능합니다.


CLI 명령어

# 생성
pvecm create 클러스터_이름

# 확인
pvecm status

추가

노드 추가는 연결 대상 노드의 엔드포인트에서 진행해야 합니다. pve1에 pve2를 연결시킬 것이므로 pve2의 엔드포인트에서 진행해야 합니다. 연결된 이후에는 pve1과 pve2의 웹 UI에서 동일하게 작업이 가능하니 결과 값은 같습니다. 편의 상 자주 사용할 pve1을 master, 연결할 pve2를 slave로 구분해두겠습니다.

  • 두 클러스터 노드 간 ssh 접근 가능 여부 확인
    pve2의 root@pam 세션 인증 방식으로 연결한 뒤 pve1의 ssh_fingerprint(지문) 값을 파라메터로 전송해야 하기 때문에 두 서버 간 통신 및 ssh 연결이 가능한지 확인하고 진행합니다. 원활한 연결을 위해 상호 간 /etc/hosts에 등록해두면 좋습니다.

Postman

① pve1 (master) 지문 값 획득

지문 값 획득은 웹 UI에서 확인이 가능합니다. sha256 기반으로 출력됩니다.

WEB UI → [데이터 센터] → [클러스터 선택] → [시스템] → [인증서] → pve-ssl.pem 지문 값 확인

② 클러스터 노드 가입 (pve2, slave에서 진행)
https://pve.proxmox.com/pve-docs/api-viewer/index.html#/cluster/config/join

항목
HTTP MethodPOST
End Pointhttps://<proxmox_host>:8006/api2/json/cluster/config/join
Content-Typeapplication/x-www-form-urlencoded
HeaderCookie : PVEAuthCookie=ticket 값
CSRFPreventionToken : CSRF Token 값
Bodyfingerprint, hostname, password 값이 필수로 필요하며, 기타 옵션 사용 가능
인증 방식세션기반
역할Administrator

유의해야 할 점은 hostname, password, fingerprint 모두 pve1의 정보를 pve2의 End Point로 전송한다는 것입니다.
결과 값이 200 OK로 출력되면서 입력한 프로세스의 ID 값이 출력됩니다.

③ 실제 연결 여부 확인

하지만 메시지를 보낸 것이 성공했다는 것이지 처리 결과의 성공을 의미하는 것은 아니기 때문에 반드시 결과를 확인해야 합니다.


CLI 명령어

마찬가지로 추가할 노드(slave 역할)에서 명령어를 실행해야 합니다.
즉, pve2에서 명령어로 클러스터 IP를 pve1로 입력해야 합니다.

pvecm add 클러스터_IP

확인 명령어는 아래와 같습니다.

# task 번호로 작업 내역 확인 시
pvesh get /nodes/pve2/tasks

# node 정보 확인 시
pvesh get /cluster/config/nodes

# 모든 연결 정보 확인 시
pvecm status


제거

클러스터 노드 제거는 가능한 내부 명령어로 수행하길 권장 드립니다. 테스트 시 제거 작업은 Permission denied로 잘 수행되지 않았습니다.

Postman

https://pve.proxmox.com/pve-docs/api-viewer/index.html#/cluster/config/nodes/{node}
항목
HTTP MethodDELETE
End Pointhttps://<proxmoxhost>:8006/api2/json/cluster/config/nodes/삭제할_node

root@pam 권한 상속 API Token 이용 시

root@pam 세션 인증 이용 시|


CLI 명령어

추가와는 다르게 이번에는 마스터 노드인 pve1에서 명령어로 pve2를 제거합니다.

# 권한 상승
pvecm expected 1
# 노드 제거
pvecm delnode 클러스터_노드_명

명령어로 제거 이후 확인해보면 노드 정보에는 없지만 웹 UI에는 아래와 같이 남아있을 수 있습니다.

이럴 경우 마스터 노드에서 corosync 파일 수정 후 pve2 폴더를 삭제해야 합니다.

cp -arp /etc/pve/corosync.conf /etc/pve/corosync.conf_backup
vi /etc/pve/corosync.conf

rm -rf /etc/pve/nodes/pve2

필요에 따라 서버를 리부팅하거나 pve 데몬들을 재시작해줍니다.

이 과정을 pve2에서도 똑같이 진행해주면 됩니다.

만일 [main] notice: unable to acquire pmxcfs lock - trying again 에러가 발생한다면 아래 게시글을 참고합니다.

https://forum.proxmox.com/threads/unable-to-acquire-pmxcfs-lock-trying-again.56810/
systemctl stop pve-cluster
systemctl stop corosync
pmxcfs -l
rm /etc/pve/corosync.conf
rm -r /etc/corosync/*
killall pmxcfs
systemctl start pve-cluster
profile
Raiju Hantu Goryo Obake

0개의 댓글