July 20, 2025

[Home-K8S] #9 Talos - Disk & Partition (v1.10+)

[Home-K8S] #9  Talos - Disk & Partition (v1.10+)

ssh 를 통한 원격 접속도 안되고, kubelet이 namespace로 분리되어 있기 때문에 폴더 하나 만드는 일에도 yaml 파일을 수정해서 apply 를 해줘야 합니다.

Host Path 생성 (extraMounts)

root 파일 시스템에 폴더를 만들고 kubelet namespace에서 해당 경로를 연결해 줘야 합니다.

저는 local-path-provisioner 를 사용하기 위해 경로를 하나 만들어 줄 겁니다. destination : containerd 에서 사용할 경로
source : root 경로

machine:
  kubelet:
    extraMounts:
      - destination: /var/lib/local-path-provisioner 
        type: bind # Type specifies the mount kind.
        source: /var/lib/local-path-provisioner
        options:
          - bind
          - rshared
          - rw

경로에 폴더가 없으면 생성합니다.

Disk 마운트

disk를 마운트 할 때에는 UserVolumeConfig 를 사용합니다.
install > disk 처럼 경로를 직접 설정해 줘도 되지만, 경로는 바뀔 수 있으므로 diskSelector를 추천합니다.

아래 설정을 yaml 파일 제일 아래에 추가하면 됩니다.

---
apiVersion: v1alpha1
kind: UserVolumeConfig
name: data-disk
provisioning:
    diskSelector:
        match: disk.size > 900u * GiB && disk.size < 1200u * GiB
    minSize: 900GiB
    maxSize: 1200GiB
filesystem:
    type: xfs
💡
minSize, maxSize 중에 하나는 지정을 해야합니다.
전체 Disk 의 +- 100 정도로 설정하는 것을 추천합니다.
💡
지원하는 filesystem 은 Talos 공식 문서를 참조해 주세요.

diskSelector

이놈때문에 고생을 좀 했어요. "talosctl get disks -n <node ip>" 로 disk 정보를 보고 집어넣으려고 했더니 잘 안되더라구요.

와일드 카드(*) 도 되고 startswith 도 된다는데 저는 실패했습니다.

Disk Management
Guide on managing disks
diskSelector: 
  match: disk.size > 900u * GiB
💡
disk 의 wwid 나 이름에 공백이 들어간다.
또는 중국산이라 이름이 약간 애매해다.
싶으면 그냥 disk.size 로 정하는 게 맞습니다.

경로 생성

"/var/mnt/data-disk" 경로로 마운트 됩니다. 바로 사용해도 되지만 extraMounts 로 설정해 주는 것이 정상 mount 확인하기도 편합니다.

  extraMounts:
    - destination: /var/lib/local-path-provisioner
      type: bind
      source: /var/mnt/data-disk/local-path
      options:
        - bind
        - rshared
        - rw

오류 해결 방법

마운트가 정상적으로 되지 않아 경로가 생성되지 않으면 "mount failed" 로그를 계속 발생시키다가 터져서 꺼져버립니다.

로그를 보면 "u-data-disk" 라고 "u-" 가 붙어서 나오게 되는데, 마운트 설정을 잘못해서 disk 를 못찾는 것입니다.

u-data-disk 는 라벨로, diskSelector를 잘 설정해서 정상적으로 마운트 되면 /var/mnt/data-disk 에 마운트 됩니다.

Disk Partition (디스크 파티션)

디스크를 마운트 할 때 maxSize 를 지정하면 나머지는 따로 마운트를 진행하면 됩니다. 하나의 디스크를 나누는 거죠.

---
apiVersion: v1alpha1
kind: UserVolumeConfig
name: data-disk
provisioning:
    diskSelector:
        match: disk.transport == 'nvme'
    maxSize: 500GiB
filesystem:
    type: xfs
---
apiVersion: v1alpha1
kind: UserVolumeConfig
name: data-disk
provisioning:
    diskSelector:
        match: disk.transport == 'nvme'
    maxSize: 500GiB
filesystem:
    type: xfs

OS Disk partition

OS Disk 는 EPHEMERAL 파티션을 데이터 용으로 사용합니다.
해당 부분을 설정해서 OS 영역 크기를 설정할 수 있습니다.

---
apiVersion: v1alpha1
kind: VolumeConfig
name: EPHEMERAL
provisioning:
  maxSize: 125GiB

남은 부분은 UserVolumeConfig 로 설정하면 되겠죠.

---
apiVersion: v1alpha1
kind: UserVolumeConfig
name: data
provisioning:
  diskSelector:
    match: system_disk
  minSize: 250GiB
filesystem:
  type: xfs

Comments