Helm Üzerinden Kurulum
V2.2.0'dan bu yana GPUStack, resmi Helm chart'ı kullanılarak küme içi Higress API ağ geçidiyle Kubernetes'e dağıtılabilir.
Not
Higress ile GPUStack'i Kubernetes'e dağıtmak şu anda deneysel olarak kabul ediliyor. Devam etmeden önce sınırlamaları inceleyin.
Önkoşullar
| Bileşen | Versiyon |
|---|---|
| Helm | >= v3.18.4 |
| Kubernetes | >= v1.30.0 |
| GPUStack | >= v2.2.0 |
Ayrıca:
- Sunucunun veri birimi için kümede varsayılan bir
StorageClassyapılandırılmalıdır (k3s'de varsayılanlocal-path'dir). Alternatif olarak, PVC yerine ana bilgisayar yolu birimini kullanmak içinserver.dataVolume.hostPath'yi ayarlayın. - GPU çalışanları için, uygun GPU sürücülerinin ve konteyner araç setlerinin düğümlere yüklendiğinden emin olun (bkz. Yükleme Gereksinimleri) ve Düğüm Özellik Keşfi (NFD), GPU düğümleri etiketlenecek şekilde yüklendiğinden emin olun.
Sınırlamalar
- GPUStack sunucusu
StatefulSetolarak dağıtılır ve şu anda birden fazla replikayı desteklemez. - Varsayılan olarak, paket halindeki gömülü
PostgreSQLveritabanı kullanılır. Üretim içinserver.externalDatabaseURLüzerinden harici bir veritabanının belirtilmesi tavsiye edilir. - Higress eklentileri, GPUStack ile birlikte kurulan özel bir
gpustack/higress-pluginsDağıtım tarafından sunulur. Higress ağ geçidi yeniden başlatıldığında bu hizmetten eklentileri indirir; hizmet kullanılamıyorsa, eklentiler erişilebilir hale gelene kadar ağ geçidinin başlatılması engellenir. - Paketlenmiş
higress-corealt chart'ı, Higress'i kümenin giriş denetleyicisi olarak dağıtır. Başka bir giriş denetleyicisi zaten çalışıyorsa,higress-core.enabled=false'i ayarlayın vegateway.ingressClassname'yi mevcut bir Higress örneğine yönlendirin.
k3s'yi yükleyin (isteğe bağlı)
Aşağıdaki adımlarda örnek Kubernetes dağıtımı olarak k3s kullanılmıştır. Diğer CNCF uyumlu dağıtımlar (RKE2, kubeadm tabanlı kümeler veya yönetilen bulut Kubernetes), yukarıdaki sürüm gereksinimlerini karşıladıkları sürece de çalışır.
Giriş denetleyicisi olarak Higress kullanıldığından k3s'yi Traefik devre dışı bırakarak yükleyin. Yüksek kullanılabilirliğe sahip k3s kümeleri için k3s belgelerine bakın.
Kurulumu doğrulayın:
Helm ile GPUStack'ı yükleyin
Chart, Docker Hub'da oci://registry-1.docker.io/gpustack/gpustack-chart'da OCI yapısı olarak yayınlanır. Chart sürümü GPUStack sürümünü izler (örn. chart 2.2.0, GPUStack v2.2.0'yi gönderir).
En son kararlı sürümü yükleyin. --version atlandığında, Helm en yeni kararlı chart sürümünü otomatik olarak çözer ve geliştirme/yayın öncesi derlemeleri atlar:
Belirli bir sürümü sabitlemek için --version <chart-version> ekleyin (chart sürümü GPUStack sürümüyle eşleşir, örneğin 2.2.0):
Varsayılan olarak higress-core alt chart'ı etkinleştirilir ve GPUStack ile birlikte dağıtılır. Kümenizde zaten Higress yüklüyse, birlikte verilen Higress'i devre dışı bırakın ve GPUStack'i mevcut örneğinize yönlendirin:
Parametreleri özelleştirmek için kurulum sırasında --set key=value veya -f your-values.yaml tuşlarını kullanın. Aşağıdaki Chart Parametreleri'e bakın.
Klonlanmış Bir Depodan Kurulum
Alternatif olarak, depoyu kopyalayın ve yerel chart dizininden yükleyin (ağdan yalıtılmış ortamlar için veya chart'ı değiştirirken kullanışlıdır):
Higress'i Ayrı Olarak Kurmak
higress-core.enabled=false'ı ayarlarsanız GPUStack'i dağıtmadan önce uyumlu bir Higress örneği yükleyin:
IngressClass'ın mevcut olduğunu ve adının gateway.ingressClassname ile eşleştiğini doğrulayın:
Higress özelleştirmesi için Higress belgelerine bakın.
GPUStack'e erişim
Sunucu bölmesinin hazır olmasını bekleyin:
İlk yönetici şifresini alın:
server.ingress.hostname ayarlamadıysanız, girişten GPUStack UI adresini alın:
Adresi bir tarayıcıda açın ve admin kullanıcı adı ve yukarıda alınan şifreyle giriş yapın.
Ortak Yapılandırma
Worker DaemonSets'i Etkinleştirme
Worker DaemonSet'ler varsayılan olarak devre dışıdır (worker.enabled=false). Etkinleştirildiğinde, chart bir CPU çalışan DaemonSet'i (<release>-worker) ve worker.gpuVendors'de listelenen GPU satıcısı başına bir DaemonSet'i (<release>-worker-<vendor> olarak adlandırılır) oluşturur.
Desteklenen worker.gpuVendors değerleri: nvidia, mthreads, amd, ascend, hygon, metax, iluvatar, cambricon, thead.
Not
Her GPU DaemonSet, Node feature Discovery tarafından tanıtılan otomatik bir PCI varlığı nodeSelector etiketi (örneğin NVIDIA için feature.node.kubernetes.io/pci-10de.present: "true") alır. Kümede NFD kurulmalıdır, aksi takdirde hiçbir düğüm gerekli etiketleri taşımaz ve tüm çalışan bölmeleri Pending kalır.
En az bir GPU satıcısı listelendiğinde (yani worker.gpuVendors boş değilse), her çalışan podu ayrıca gerekli bir podAntiAffinity (topologyKey=ana bilgisayar adı) alır, böylece iki çalışan bir düğümü paylaşamaz — bu, hostNetwork: true bağlantı noktalarını çarpışmaya karşı korur.
CPU işçisi DaemonSet, nodeSelector feature.gpustack.ai/acceleratable: "false" aracılığıyla GPU satıcısının talep etmediği düğümleri kapsar. Bu düğümleri yalnız bırakmak için worker.cpuEnabled=false'yi ayarlayın; genellikle kontrol düzlemi kümeyi GPU düğümleriyle paylaştığında ve işçi kazanmaması gerektiğinde:
worker.gpuVendors daha sonra desteklenen en az bir satıcının adını vermelidir; aksi takdirde yayın hiçbir çalışan DaemonSet oluşturmaz ve kurulum reddedilir. GPU DaemonSet'leri her iki durumda da -<vendor> son ekini korur, dolayısıyla CPU'yu kapatmak asla bunlardan birinin adını <release>-worker olarak değiştirmez.
Alternatif olarak, kurulumdan sonra Clusters ve Workers sayfalarındaki kullanıcı arayüzü aracılığıyla GPU kümeleri ve çalışan düğümleri ekleyin.
Harici Veritabanı Kullanma
GPUStack varsayılan olarak yerleşik PostgreSQL veritabanını kullanır. Harici bir PostgreSQL veya MySQL veritabanı kullanmak için server.externalDatabaseURL değerini ayarlayın:
HTTPS'yi Özel Sertifikayla Etkinleştirme
Sertifikayı ve anahtar içeriklerini (PEM) server.ingress.tls aracılığıyla sağlayın. Her ikisi de ayarlandığında giriş şeması HTTPS olur:
Özel Kayıttan İmaj Çekme
Tüm imajları (GPUStack sunucusu/çalışanı, higress eklentileri ve paket halindeki higress-core ağ geçidi/denetleyici/pilot) yansıtılmış özel bir kayıt defterinden çekmek için global.hub'i geçersiz kılın. Bu, Helm'in global değerleri yayılımına dayanır, dolayısıyla her imajı kapsayan tek bir ayar vardır:
global.hub aynı zamanda sunucuya GPUSTACK_SYSTEM_DEFAULT_CONTAINER_REGISTRY olarak aktarılarak çıkarım motoru imajlarının (örn. vLLM, llama.cpp) aynı kayıt defterinden çekilmesi sağlanır.
Çekme kimlik bilgilerini sağlamak için chart, gpustack-image-pull-secret adında bir docker-registry Sırrı oluşturabilir ve bunu tüm bölmelere bağlayabilir:
Bunun yerine önceden var olan kendi Sırlarınıza referans vermek için global.imagePullSecrets ile değiştirin:
Chart Parametreleri
En sık kullanılan parametreler aşağıda listelenmiştir. Tam ve yetkili liste için chart'ın values.yaml ve README'lerine bakın.
| Parametre | Varsayılan | Açıklama |
|---|---|---|
debug | false | Hata ayıklama modunu etkinleştirin. |
registrationToken | null | İşçi kayıt jetonu; null ise rastgele bir tane oluşturulur ve yeniden kullanılır. |
clusterDomain | cluster.local | Kubernetes küme hizmeti etki alanı son eki. |
global.hub | docker.io | Konteyner kayıt defteri ana bilgisayarı; özel bir kayıt defteri için geçersiz kıl. |
global.imagePullSecrets | [gpustack-image-pull-secret] | Görüntü çekme Sırları tüm bölmelere eklenir ve alt chart'lara yayılır. |
global.nodeSelector | {} | Her bileşen için varsayılan nodeSelector; bileşen düzeyindeki değerle değiştirilir. |
image.repository | gpustack/gpustack | Ad alanına sahip imaj deposu; son referans {global.hub}/{repository}:{tag}. |
image.tag | null | İmaj etiketi; varsayılan olarak chart'ın appVersion'sine ayarlanır. |
image.pullPolicy | IfNotPresent | İmaj çekme politikası. |
imagePullSecret.credentials.registry | docker.io | Chart, imaj çekme Secret kaynağını oluşturduğunda kullanılan kayıt defteri ana bilgisayarı. |
imagePullSecret.credentials.username | null | Kayıt defteri kullanıcı adı; Parolayla ayarlandığında Sırrı oluşturur. |
imagePullSecret.credentials.password | null | Kayıt defteri şifresi; Kullanıcı adı ile ayarlandığında Sırrı oluşturur. |
server.ingress.hostname | null | Sunucu için giriş ana bilgisayar adı. |
server.ingress.tls.cert | null | Ingress TLS sertifikası (PEM); özel anahtarla birlikte ayarlandığında HTTPS'yi etkinleştirir. |
server.ingress.tls.key | null | Ingress TLS özel anahtarı (PEM). |
server.externalDatabaseURL | null | Harici veritabanı bağlantı dizesi (PostgreSQL veya MySQL). |
server.dataVolume.hostPath | null | Sunucu veri birimi için ana bilgisayar yolu; PVC yerine hostPath kullanır. |
server.dataVolume.size | 100Gi | Sunucu veri birimi boyutu (PVC). |
server.apiPort | 30080 | API hizmet bağlantı noktası. |
server.metricsPort | 10161 | Sunucu ölçümleri bağlantı noktası. |
server.environmentConfig | {} | GPUStack sunucusu için ekstra ortam değişkenleri. |
server.nodeSelector | {} | Sunucu bölmesi nodeSelector; boş olmadığında global.nodeSelector'in yerine geçer. |
gateway.ingressClassname | higress | Higress Giriş Sınıfı adı; bulunduğunda küme içi ağ geçidi modunu etkinleştirir. |
higress-core.enabled | true | Birlikte verilen Higress ağ geçidini dağıtın; Zaten yüklüyse devre dışı bırakın. |
worker.enabled | false | Worker DaemonSet manifestlerini oluşturur. |
worker.gpuVendors | [nvidia] | GPU satıcıları; Satıcı başına bir DaemonSet artı CPU DaemonSet. |
worker.cpuEnabled | true | CPU worker DaemonSet manifestini oluşturur; false bir GPU satıcısı gerektirir. |
worker.nodeSelector | {} | Temel çalışan nodeSelector; boş olmadığında global.nodeSelector'in yerine geçer. |
worker.port | 10150 | Worker hizmetinin bağlantı noktası. |
worker.metricsPort | 10151 | Çalışan ölçümleri bağlantı noktası. |
worker.dataDir | /var/lib/gpustack | Ana makine yolu, her çalışan bölmesinin içinde /var/lib/gpustack'ye monte edilmiştir. |
worker.environmentConfig | {} | GPUStack çalışanı için ekstra ortam değişkenleri. |
Kaldırma
Bu Helm sürümü sunucudan fazlasını kurar: gpustack-operator alt chart'ı Kueue ve Node Feature Discovery denetleyicilerini getirir; operatör de finalizer içeren özel kaynaklar oluşturur. helm uninstall denetleyicileri de kaldırdığı için özel kaynaklar önce, denetleyiciler hâlâ çalışırken silinmelidir. Aksi hâlde nesneler sonsuza kadar Terminating durumunda kalır ve gpustack-system ad alanı da bu durumdan çıkamaz. Şu sırayı izleyin:
-
her denetleyici hala çalışırken iş yüklerini boşaltın. Operatör,
Instancenesnelerindeki sonlandırıcıları temizliyor ve Kueue, kabul edilenWorkload'lerin hala onu işgal etmesine rağmenClusterQueue'i serbest bırakmayı reddediyor - bu nedenle herhangi bir şey kapatılmadan önce bunların gitmesi gerekiyor.Instance'ler ad alanına sahiptir ve kiracıların ad alanlarında yaşar, bu nedenle hepsini-Aile numaralandırın. Modelleri sunucudan (veya örneklerini doğrudan) silin; her bulut sunucusunun kapsülü onunla sona erer ve İş Yükü Bulut Sunucusu ile birlikte gider. Ad alanının bölmelerini toptan silmeyin; bu, operatörü, Kueue ve NFD denetleyicilerini de beraberinde getirir ve temizliği bitiren onlar olur:Kueue diğer uygulamalarla paylaşılıyorsa burada veya 3. adımda
--allkullanmayın; yalnızca GPUStack nesnelerini silin. Operatörün Kueue'de oluşturduğu her şeygpustackönekiyle (clusterqueue/gpustack--…,admissioncheck/gpustack-node-devices) adlandırılır. Küme kapsamlı türler yalnızca ada göre seçilir; ad alanı olanların ad alanının taşınmasına ihtiyacı vardır, çünkü-o namebunu atlar: -
Operatörün kendi denetleyicilerini durdurun, ancak sürümü kurulu bırakın, böylece Kueue denetleyicileri çalışmaya devam eder; bir sonraki adımda silme işlemlerini sonlandıranlar onlardır.
gpustack-operator-workervegpustack-operator-device-manager-*DaemonSets çalıştığı sürece,LocalQueue'leri,ClusterQueue'leri vegpustack-node-devicesAdmissionCheck'i sildiğiniz anda yeniden oluştururlar, böylece sayılar asla sıfıra ulaşmaz: -
Kueue kaynaklarını bağımlılık sırasına göre silin —
LocalQueues, sonraClusterQueues, sonraAdmissionChecks, sonraResourceFlavors. Kueue, kullanıcıları hala mevcut olan bir nesne üzerindekueue.x-k8s.io/resource-in-usesonlandırıcıyı tutar:gpustack-node-devicesAdmissionCheck, her ClusterQueue bitene kadar ve her ClusterQueue, LocalQueue'ları ve kabul edilen İş Yükleri bitene kadar silinmiş durumda kalır. Bir sonrakine geçmeden önce her türün boş olmasını bekleyin. Paylaşılan bir kümede, 1. adımdaki--allyerine her komutagpustackönek kapsamını uygulayın: -
Sürümü kaldırın.
--waitparametresini kullanmayın: Node Feature Discovery'nin silme sonrası temizleme hook'u, silme işleminin tamamlanmasını--timeoutsüresinden daha uzun süre bekletir. Bundan çıkmak için Helm'i zorla sonlandırmak, temizlemeye ait RBAC kaynaklarını sahipsiz bırakır (5. adımda bunlar elle kaldırılır;--waitkullanmasanız da 5. adımı uygulayın): -
helm uninstallkomutunun kaldırmadığı kaynakları kaldırın. Helm, CRD'leri hiçbir zaman silmez; operatör de hiçbir sürümün sahip olmadığı admission webhook'ları ve APIServices kaydeder. Operatörün Service'i artık bulunmadığından her ikisi de hata durumunda istekleri reddeder (fail closed); webhook'lar silinene kadar aşağıdaki finalizer kaldırma işlemini de reddeder:worker.gpustack.aigrubu her zaman GPUStack'e aittir — başka hiçbir bileşen onu kullanmaz — dolayısıyla CRD'lerinin koşulsuz olarak silinmesi güvenlidir. -
Sürümün geride bıraktığı CRD'leri silin — yalnızca bu sürümün yüklediği CRD'leri. Bir CRD'nin silinmesi tüm kümedeki bu türden her nesneyi siler; dolayısıyla küme GPUStack'ten önce zaten Kueue, Node Özellik Keşfi veya Higress çalıştırıyorsa (yukarıdaki
higress-core.enabled'e bakın) ve başka herhangi bir şey hala bunları kullanıyorsa, CRD'lerini yerinde bırakın ve bu gruplar için bu adımı atlayın. Tahmin etmek yerine bu sürümün neler içerdiğini keşfedin:Kueue'nin CRD'lerini ve chart tarafından kurulmuşsa NFD'leri ve Higress'leri listeleyen bir stok kurulumda:
Küme sağlayıcısının kendi CRD'leri hiçbir zaman GPUStack'in silinecekleri değildir — örneğin bir k3s kümesindeki
*.k3s.cattle.iovehelm.cattle.iokümeye aittir. -
(İsteğe bağlı) Higress nesnelerini, bootstrap ConfigMap'i, ServiceAccount'u ve Secret kayıt belirtecini kendisiyle birlikte alan ad alanını silin. Bununla birlikte ne olacağını bilin: Ad alanı, sunucunun kalıcı verilerini (kullanıcıları, modelleri ve kümeleriyle birlikte yerleşik PostgreSQL veritabanı) taşıyan sunucunun PVC'sini (
gpustack-data-dir-gpustack-server-0,<volumeClaimTemplate>-<statefulset>-<ordinal>) tutar.Deletegeri alma politikasında (local-pathvarsayılan) temeldeki birim de silinir. Verilerin yeniden yüklenmesini istiyorsanız ad alanını koruyun; aksi halde ad alanını silin (ve geri alma politikası zaten kaldırmıyorsa önce PVC'yi):