公式ドキュメントを見ながらMinIO TenantをKubernetesクラスタにデプロイしていたときに、ハマった箇所を残しておくためのメモ。
環境
ホストマシン: GMKtec N100
仮想化基盤: Proxmox
VM OS: Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-49-generic x86_64)
Kubernetes: 1.31.3
CRI-O: 1.31.3
エラー
PodのStatusがErrorになっているので、ログを確認すると
Defaulted container "minio" out of: minio, sidecar, validate-arguments (init)
Fatal glibc error: CPU does not support x86-64-v2
どうやらCPUの命令セットとの互換性が無いらしい。
解決策
コンテナレジストリを確認すると
% curl -s "https://quay.io/api/v1/repository/minio/minio/tag/?limit=100&page=1" | jq '.tags[] | .name'
"RELEASE.2024-11-07T00-52-20Z.fips"
"RELEASE.2024-11-07T00-52-20Z-cpuv1"
"RELEASE.2024-11-07T00-52-20Z"
"latest"
"RELEASE.2024-10-29T16-01-48Z.fips"
"RELEASE.2024-10-29T16-01-48Z-cpuv1"
"RELEASE.2024-10-29T16-01-48Z"
"RELEASE.2024-10-13T13-34-11Z.fips"
"RELEASE.2024-10-13T13-34-11Z-cpuv1"
"RELEASE.2024-10-13T13-34-11Z"
cpuv1というタグが付いたイメージがある。
マニフェストを持ってきて、使われるイメージを確認すると
kubectl kustomize https://github.com/minio/operator/examples/kustomization/base/ > tenant-base.yaml
spec:
certConfig: {}
configuration:
name: storage-configuration
env: []
externalCaCertSecret: []
externalCertSecret: []
externalClientCertSecrets: []
features:
bucketDNS: false
domains: {}
image: quay.io/minio/minio:RELEASE.2024-10-02T17-50-41Z #ここ
無印で落ちてくるのは、v2以上に対応しているもののようなので、今回のエラーに見舞われてしまった。
-cpuv1
をつけると、問題なく起動することができた。
原因
lscpuコマンドで対応している命令セットを見てみる。
fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx
fxsr sse sse2 ht syscall nx lm constant_tsc nopl xtopology cpuid tsc_known_freq
pni cx16 x2apic hypervisor lahf_lm cpuid_fault pti
fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx
fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good
nopl tsc_reliable nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1
sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm
cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs
ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpci d avx512f avx512dq rdseed
adx smap avx512ifma clflushopt clwb avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec
xgetbv1 xsaves avx512_bf16 clzero xsaveerptr a rat npt nrip_save tsc_scale vmcb_clean
flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vmload avx512vbmi umip
avx512_vbmi2 gfni vaes vpclmulqdq avx 512_vnni avx512_bitalg avx512_vpopcntdq rdpid
fsrm
と、対応している命令セットにかなり違いがあることがわかる。
RedHatさんによると
x86-64-v2 brings support (among other things) for vector instructions up to Streaming SIMD Extensions 4.2 (SSE4.2) and Supplemental Streaming SIMD Extensions 3 (SSSE3), the POPCNT instruction (useful for data analysis and bit-fiddling in some data structures), and CMPXCHG16B (a two-word compare-and-swap instruction useful for concurrent algorithms).
x86-64-v3 adds vector instructions up to AVX2, MOVBE (for big-endian data access), and additional bit-manipulation instructions.
x86-64-v4 includes vector instructions from some of the AVX-512 variants.
つまり、AVX512まで対応しているRyzen 9 7900はv4、SSE4.2やSSSE3にすら対応していないN100はv1ということになる。